ோப்பு அதிகபட்ச அளவை மீறிவிட்டது",url:"இணையதள முகவரி",remove:"படத்தை நீக்கு",original:"Original"},video:{video:"காணொளி",videoLink:"காணொளி இணைப்பு",insert:"காணொளியை செருகு",url:"இணையதள முகவரி",providers:"(YouTube, Vimeo, Vine, Instagram, DailyMotion or Youku)"},link:{link:"இணைப்பு",insert:"இணைப்பை செருகு",unlink:"இணைப்பை நீக்கு",edit:"இணைப்பை தொகு",textToDisplay:"காட்சி வாசகம்",url:"இணையதள முகவரி",openInNewWindow:"புதிய சாளரத்தில் திறக்க"},table:{table:"அட்டவணை",addRowAbove:"Add row above",addRowBelow:"Add row below",addColLeft:"Add column left",addColRight:"Add column right",delRow:"Delete row",delCol:"Delete column",delTable:"Delete table"},hr:{insert:"கிடைமட்ட கோடு"},style:{style:"தொகுப்பு",p:"பத்தி",blockquote:"மேற்கோள்",pre:"குறியீடு",h1:"தலைப்பு 1",h2:"தலைப்பு 2",h3:"தலைப்பு 3",h4:"தலைப்பு 4",h5:"தலைப்பு 5",h6:"தலைப்பு 6"},lists:{unordered:"வரிசையிடாத",ordered:"வரிசையிட்ட"},options:{help:"உதவி",fullscreen:"முழுத்திரை",codeview:"நிரலாக்க காட்சி"},paragraph:{paragraph:"பத்தி",outdent:"வெளித்தள்ளு",indent:"உள்ளே தள்ளு",left:"இடது சீரமைப்பு",center:"நடு சீரமைப்பு",right:"வலது சீரமைப்பு",justify:"இருபுற சீரமைப்பு"},color:{recent:"அண்மை நிறம்",more:"மேலும்",background:"பின்புல நிறம்",foreground:"முன்புற நிறம்",transparent:"தெளிமையான",setTransparent:"தெளிமையாக்கு",reset:"மீட்டமைக்க",resetToDefault:"இயல்புநிலைக்கு மீட்டமை"},shortcut:{shortcuts:"குறுக்குவழி",close:"மூடு",textFormatting:"எழுத்து வடிவமைப்பு",action:"செயல்படுத்து",paragraphFormatting:"பத்தி வடிவமைப்பு",documentStyle:"ஆவ


K') = HMAC_SHA256(FC |P0 | L0 | P1 | L1)
 */
bool eap_aka_derive_primes(const uint8_t *ck, const uint8_t *ik,
		const uint8_t *autn, const uint8_t *network, uint16_t net_len,
		uint8_t *ck_p, uint8_t *ik_p);

/*
 * RFC 5448, Section 3.4.1
 *
 * PRF'(K,S) = T1 | T2 | T3 | T4 | ...
 *
 *     where:
 *     T1 = HMAC-SHA-256 (K, S | 0x01)
 *     T2 = HMAC-SHA-256 (K, T1 | S | 0x02)
 *     T3 = HMAC-SHA-256 (K, T2 | S | 0x03)
 *     T4 = HMAC-SHA-256 (K, T3 | S | 0x04)
 *     ...
 *
 * RFC 5448, Section 3.3
 *
 * MK = PRF'(IK'|CK',"EAP-AKA'"|Identity)
 *      K_encr = MK[0..127]
 *      K_aut  = MK[128..383]
 *      K_re   = MK[384..639]
 *      MSK    = MK[640..1151]
 *      EMSK   = MK[1152..1663]
 */
bool eap_aka_prf_prime(const uint8_t *ik_p, const uint8_t *ck_p,
		const char *identity, uint8_t *k_encr, uint8_t *k_aut,
		uint8_t *k_re, uint8_t *msk, uint8_t *emsk);

/*
 * Separate PRNG data into encryption keys. k_encr and k_aut may be NULL in the
 * case of fast re-authentication.
 *
 * buf - output data from the PRNG, 160 bytes
 * k_encr - first 16 bytes of buf
 * k_aut - next 16 bytes of buf
 * msk - next 64 bytes of buf
 * emsk - next 64 bytes of buf
 */
bool eap_sim_get_encryption_keys(const uint8_t *buf, uint8_t *k_encr,
		uint8_t *k_aut, uint8_t *msk, uint8_t *emsk);

/*
 * Derive a packets MAC. This can be used to compute the packets MAC in place,
 * by setting mac to the proper zero'ed location in buf.
 *
 * buf - the SIM packet, including MAC portion zero'ed, plus extra (e.g. SRES)
 * len - the total length of buf
 * key - encryption key to use (e.g. K_encr)
 * mac - buffer for the 16 byte MAC
 */
bool eap_sim_derive_mac(enum eap_type type, const uint8_t *buf, size_t len,
		const uint8_t *key, uint8_t *mac);

/*
 * Helper to build the EAP packet header
 *
 * eap - eap_state, used to get the identifier
 * method - EAP method (SIM or AKA)
 * type - EAP-SIM subtype
 * buf - EAP packet
 * len - length of packet
 */
size_t eap_sim_build_header(struct eap_state *eap, enum eap_type method,
		uint8_t type, uint8_t *buf, uint16_t len);

/*
 * Signal that the client has detected an error
 *
 * eap - eap_state
 * type - type of EAP method (SIM or AKA)
 * code - error code to send
 */
void eap_sim_client_error(struct eap_state *eap, enum eap_type type,
		uint16_t code);

/*
 * Add an EAP-SIM attribute to a buffer.
 *
 * buf - pointer to start of EAP-SIM attribute
 * attr - type of attribute
 * ptype - Padding type AT_PAD_ZERO, AT_PAD_NONE or AT_PAD_LENGTH
 * data - EAP-SIM attribute data, if NULL zeros will be written
 * dlen - length of data pointer in bytes
 *
 * Returns the number of bytes written to buf.
 */
size_t eap_sim_add_attribute(uint8_t *buf, enum eap_sim_at attr,
		uint8_t ptype, const uint8_t *data, uint16_t dlen);

/*
 * Verify a packets MAC
 *
 * eap - eap_state pointer, used to rebuild the EAP header
 * buf - should point to the start of the EAP-SIM packet
 * len - length of EAP packet
 * extra - Any extra block of data needed to compute the MAC
 * elen - Length of 'extra'
 */
bool eap_sim_verify_mac(struct eap_state *eap, enum eap_type type,
		const uint8_t *buf, uint16_t len, uint8_t *k_aut,
		uint8_t *extra, size_t elen);

bool eap_sim_tlv_iter_init(struct eap_sim_tlv_iter *iter, const uint8_t *data,
		uint32_t len);

bool eap_sim_tlv_iter_next(struct eap_sim_tlv_iter *iter);

uint8_t eap_sim_tlv_iter_get_type(struct eap_sim_tlv_iter *iter);

uint16_t eap_sim_tlv_iter_get_length(struct eap_sim_tlv_iter *iter);

const void *eap_sim_tlv_iter_get_data(struct eap_sim_tlv_iter *iter);


ds = parseInt(time_arr[1]);

			return new Date(cur_year, cur_month, cur_days, cur_hours, cur_minutes, cur_seconds);
		}

		return null;
	}

	public isNotHHMM(time_str:string):boolean{
		return !this.isHHMM(time_str);
	}
	// @ Public
	// @ Desc : 사용자가 입력한 시간이 다음과 같은 포맷인지 (00시 00분) 확인합니다.
	public isHHMM(time_str:string):boolean{

		if(null == time_str || "" === time_str) {
			return false;
		}

		let res = time_str.match(/^([0-9]|0[0-9]|1[0-9]|2[0-6]):[0-5]0$/gi);
		if(null === res || !(0 < res.length)) {
		  return false;
		}

		// 17:11 의 포맷인지 확인합니다.
		let time_arr = time_str.split(":");
		if(	time_arr == null ||
			time_arr.length != 2 ||
			time_arr[0].length != 2 ||
			time_arr[1].length != 2
		){
			return false;
		}
		return true;
	}

	public isNotYYYYMMDD_HHMMSS(date_str_yyyymmdd_hhmmss:string):boolean{
		return !this.isYYYYMMDD_HHMMSS(date_str_yyyymmdd_hhmmss);
	}

	// @ Public
	// @ Desc : 사용자가 입력한 시간이 다음과 같은 포맷인지 (ex : 2017-01-13 22:12:11) 확인합니다.
	public isYYYYMMDD_HHMMSS(date_str_yyyymmdd_hhmmss:string):boolean{

		if(null == date_str_yyyymmdd_hhmmss || "" === date_str_yyyymmdd_hhmmss) {
			return false;
		}

		let res = date_str_yyyymmdd_hhmmss.match(/^([2]{1}[0-9]{3})-([0]{1}[1-9]{1}|[1]{1}[0-2]{1})-([0]{1}[1-9]{1}|[1]{1}[0-9]{1}|[2]{1}[0-9]{1}|[3]{1}[0-1]{1}) (0[0-9]|1[0-9]|2[0-4]):([0-5]{1}[0-9]{1}):([0-5]{1}[0-9]{1})$/gi);
		if(null === res || !(0 < res.length)) {
		  return false;
		}

		return true;
	}

	public isNotYYYYMMDD(date_str_yyyymmdd:string):boolean{
		return !this.isYYYYMMDD(date_str_yyyymmdd);
	}

	// @ Public
	// @ Desc : 사용자가 입력한 시간이 다음과 같은 포맷인지 (ex : 2017-01-13) 확인합니다.
	public isYYYYMMDD(date_str_yyyymmdd:string):boolean{

		if(null == date_str_yyyymmdd || "" === date_str_yyyymmdd) {
			return false;
		}

		let res = date_str_yyyymmdd.match(/^([2]{1}[0-9]{3})-([0]{1}[1-9]{1}|[1]{1}[0-2]{1})-([0]{1}[1-9]{1}|[1]{1}[0-9]{1}|[2]{1}[0-9]{1}|[3]{1}[0-1]{1})$/gi);
		if(null === res || !(0 < res.length)) {
		  return false;
		}

		return true;
	}

	public getDoubleDigit(target_number:number):string{
		if(target_number < 10){
			return "0" + target_number;
		}
		return ""+target_number;
	}

	public getClockTime(hhmm:string): MyClockTime {

		if(this.isNotHHMM(hhmm)) {
			return null;
		}


物主义的一个哲学家。列宁在他的名著“唯物论和经验批判论”中对马赫的学说做了彻底揭露和深刻的批判。现代资产阶级的各派主观唯心主义的学说都同马赫的学说大同小异，实用主义哲学是其中之一。实用主义哲学是现代主观唯心主义各派中伪装得最“巧妙”、最狡猾的反动哲学派别之一。

   认识实用主义者的欺骗手法，就能帮助我们认识和揭露现代反动资产阶级和帝国主义的各种唯心主义哲学流派的本质。

   （二）

   实用主义者的欺骗手法，主要表现在他们力图用“实在”和“经验”这一类概念，来混淆物质和意识的关系，来抹杀马克思主义哲学关于“物质”的科学概念。

   物质和意识的关系的问题是哲学上的根本问题。承认物质是第一性的呢还是认为意识是第一性——这就是唯物主义和唯心主义的根本区别。实用主义这一派人宣称，他们既不认为物质是第一性的，也不认为意识是第一性的，他们所重视的只有“实在”和“经验”。他们企图使人以为，他们已经跳出了唯物主义和唯心主义的“纠纷”，但是实际上，只要一看到他们对于“经验”和“实在”的解释，就知道，他们其实是不折不扣的主观唯心主义者。

   关于经验这一问题，如果承认在经验以外有独立存在的不依赖于人的意识的客观世界，那就是唯物主义地了解经验。马克思主义者是重视经验的，因为人们通过经验就能得到关于客观世界的初步知识——显然，对经验的这种看法是唯一正确的看法。

   实用主义者对经验的看法是完全不同的。他们在推崇经验的名义下反对唯物主义。他们不认为在人的经验以外有独立存在的物资，却认为，离开了人的经验就没有什么客观的物质。所以实用主义对经验的解释完全是唯心主义的解释。

   实用主义者又用“实在”这个概念来代替“物质”的概念，并


.01094-68.118-138.91037-144.92467-145.22376a15.94,15.94,0,0,1-14.79876-15.89289V112.13393a16.134,16.134,0,0,1,17.29908-16.096C319.45132,104.5391,407.55627,192.64538,415.96359,302.7704Z"],save:[448,512,[],"f0c7","M433.941 129.941l-83.882-83.882A48 48 0 0 0 316.118 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V163.882a48 48 0 0 0-14.059-33.941zM224 416c-35.346 0-64-28.654-64-64 0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64zm96-304.52V212c0 6.627-5.373 12-12 12H76c-6.627 0-12-5.373-12-12V108c0-6.627 5.373-12 12-12h228.52c3.183 0 6.235 1.264 8.485 3.515l3.48 3.48A11.996 11.996 0 0 1 320 111.48z"],school:[640,512,[],"f549","M0 224v272c0 8.84 7.16 16 16 16h80V192H32c-17.67 0-32 14.33-32 32zm360-48h-24v-40c0-4.42-3.58-8-8-8h-16c-4.42 0-8 3.58-8 8v64c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v-16c0-4.42-3.58-8-8-8zm137.75-63.96l-160-106.67a32.02 32.02 0 0 0-35.5 0l-160 106.67A32.002 32.002 0 0 0 128 138.66V512h128V368c0-8.84 7.16-16 16-16h96c8.84 0 16 7.16 16 16v144h128V138.67c0-10.7-5.35-20.7-14.25-26.63zM320 256c-44.18 0-80-35.82-80-80s35.82-80 80-80 80 35.82 80 80-35.82 80-80 80zm288-64h-64v320h80c8.84 0 16-7.16 16-16V224c0-17.67-14.33-32-32-32z"],screwdriver:[512,512,[],"f54a","M448 0L320 96v62.06l-83.03 83.03c6.79 4.25 13.27 9.06 19.07 14.87 5.8 5.8 10.62 12.28 14.87 19.07L353.94 192H416l96-128-64-64zM128 278.59L10.92 395.67c-14.55 14.55-14.55 38.15 0 52.71l52.7 52.7c14.56 14.56 38.15 14.56 52.71 0L233.41 384c29.11-29.11 29.11-76.3 0-105.41s-76.3-29.11-105.41 0z"],scroll:[640,512,[],"f70e","M48 0C21.53 0 0 21.53 0 48v64c0 8.84 7.16 16 16 16h80V48C96 21.53 74.47 0 48 0zm208 412.57V352h288V96c0-52.94-43.06-96-96-96H111.59C121.74


r.retry()
    current_url = driver.current_url
    if CONSULATE_LOGIN == "Istanbul":
        request_url = current_url + AVAILABLE_DATE_REQUEST_SUFFIX.format(consulate_id="125")
    elif CONSULATE_LOGIN == "Ankara":
        request_url = current_url + AVAILABLE_DATE_REQUEST_SUFFIX.format(consulate_id="124")
    request_header_cookie = "".join(
        [f"{cookie['name']}={cookie['value']};" for cookie in driver.get_cookies()]
    )
    request_headers = REQUEST_HEADERS.copy()
    request_headers["Cookie"] = request_header_cookie
    request_headers["User-Agent"] = driver.execute_script("return navigator.userAgent")
    sleep(10)
    try:
        response = requests.get(request_url, headers=request_headers)
    except Exception as e:
        print("Get available dates request failed: ", e)
        return None
    if response.status_code != 200:
        print(f"Failed with status code {response.status_code}")
        return None
    try:
        dates_json = response.json()
    except:
        print("Failed to decode json")
        return None
    dates = [datetime.strptime(item["date"], "%Y-%m-%d").date() for item in dates_json]
    print(dates)
    return dates

def reschedule_and_send_mail(driver: WebDriver) -> bool:
    date_request_tracker = RequestTracker(DATE_REQUEST_MAX_RETRY, DATE_REQUEST_MAX_TIME)
    while date_request_tracker.should_retry():
        dates = get_available_dates(driver, date_request_tracker)
        if not dates:
            sleep(DATE_REQUEST_DELAY)
            continue

        for date in dates:
            if START_DATE < date < END_DATE:
                try:
                    print(
                        f"{datetime.now().strftime('%H:%M:%S')} FOUND SLOT ON {date}!!!"
                    )
                    insert_log(f"Boş tarih bulundu: {date}")
                    if AUTO_RESCHEDULE.get():
                        reschedule(driver, date)
                        insert_log("Otomatik rezervasyon yapıldı")

                    if SEND_EMAIL.get():
                        send_email(SENDER_EMAIL, NOTIFICACION_EMAIL, "Ais E-Mail: " + EMAIL_LOGIN + "\nAçılan tarih: " + str(date), APP_KEY_GMAIL)
                        insert_log("Email gönderildi")
                    return
                except Exception as e:
                    print("Reschedule and send mail failed: ", e)
                    continue
        print(
            f"{datetime.now().strftime('%H:%M:%S')} Not found"
        )
        insert_log(f"Herhangi bir tarih istenen aralıkta bulunamadı")
        sleep(DATE_REQUEST_DELAY)
    return

def reschedule_and_send_mail_with_new_session() -> bool:
    driver = get_chrome_driver()
    session_failures = 0
    while session_failures < NEW_SESSION_AFTER_FAILURES:
        try:
            login(driver)
            sleep(20)
            get_appointment_page(driver)
            break
        except Exception as e:
            print("Unable to get appointment page: ", e)
            session_failures += 1
            sleep(FAIL_RETRY_DELAY)
            continue
    reschedule_and_send_mail(driver)
    driver.quit()
    return True

root.mainloop()
import os
os.kill(os.getpid(), 9)


 need the URL Path escaped because
                        // that will happen when it's converted into an URL.
                        WirePathAppend(pwWirePath, cchUrlPathSize, pwWireName);
                    }
                }
                else
                {
                    LPCWSTR pwzDisplayName = FtpItemID_GetDisplayNameReference(pidl);

                    if (pwzDisplayName)
                    {
                        // The caller should never need the URL Path escaped because
                        // that will happen when it's converted into an URL.
                        DisplayPathAppend(pwzDisplayPath, cchUrlPathSize, pwzDisplayName);
                    }
                }
            }
        }

        if (SUCCEEDED(hr) && (FtpItemID_IsDirectory(pidl, FALSE) || (FtpItemID_GetCompatFlags(pidl) & COMPAT_WEBBASEDDIR)))
        {
            if (fInWireBytes)
                WirePathAppendSlash(pwWirePath, cchUrlPathSize); // Always make sure dirs end in '/'.
            else
                DisplayPathAppendSlash(pwzDisplayPath, cchUrlPathSize); // Always make sure dirs end in '/'.
        }
    }

    return hr;
}

HRESULT GetDisplayPathFromPidl(LPCITEMIDLIST pidl, LPWSTR pwzDisplayPath, DWORD cchUrlPathSize, BOOL fDirsOnly)
/*
    DESCRIPTION:
        pwzDisplayPath will be UNEscaped and in display unicode.
*/
{
    return UrlGetAbstractPathFromPidl(pidl, fDirsOnly, FALSE, (void *)pwzDisplayPath, cchUrlPathSize);
}

HRESULT GetWirePathFromPidl(LPCITEMIDLIST pidl, LPWIRESTR pwWirePath, DWORD cchUrlPathSize, BOOL fDirsOnly)
/*
    DESCRIPTION:
        pszUrlPath will be UNEscaped and in Wire Bytes.
*/
{
    return UrlGetAbstractPathFromPidl(pidl, fDirsOnly, TRUE, (void *)pwWirePath, cchUrlPathSize);
}

/*
    FUNCTION: UrlGetFileNameFromPidl

    DESCRIPTION:
        pszFileName will be filled with the file name if it exists.  If it doesn't,
    S_FALSE will be returned if the PIDL only points to a directory and not
    a file.
HRESULT UrlGetFileNameFromPidl(LPCITEMIDLIST pidl, LPTSTR pszFileName, DWORD cchSize)
{
    HRESULT hr = S_FALSE;

    if (!EVAL(FtpPidl_IsValid(pidl)))
        return E_INVALIDARG;

    ASSERT(pszFileName && (0 < cchSize));
    ASSERT(IsValidPIDL(pidl));
    pszFileName[0] = TEXT('\0');

    if (EVAL(FtpID_IsServerItemID(pidl)))       // If it's not a server, we are screwed.
        pidl = _ILNext(pidl);   // Skip past the Server Pidl.

    for (; !ILIsEmpty(pidl); pidl = _ILNext(pidl))
    {
        if (!FtpItemID_IsDirectory(pidl, FALSE))
        {
            // This isn't a directory, so the only time it's valid to not
            // be the last ItemID is if this is a file ItemID and the next
            // ItemID is a Fragment.
            ASSERT(ILIsEmpty(_ILNext(pidl)) || FtpItemID_IsFragment(_ILNext(pidl)));
            SHAnsiToTChar(FtpItemID_GetFileName(pidl), pszFileName, cchSize);
            hr = S_OK;
            break;
        }
    }

    return hr;
}
*/

#ifndef UNICODE

HRESULT UrlCreateFromPidlW(LPCITEMIDLIST pidl, DWORD shgno, LPWSTR pwzUrl, DWORD cchSize, DWORD dwFlags,


x) > 25) {
                arg_dstr_catf(ds, "  %-25s %s\n", syntax, "");
                *syntax = '\0';
            }

            arg_dstr_catf(ds, "  %-25s ", syntax);
            arg_print_formatted_ds(ds, 28, 79, glossary);
        }
    } /* for each table entry */

    arg_dstr_cat(ds, "\n");
}

void arg_print_glossary_gnu(FILE* fp, void** argtable) {
    arg_dstr_t ds = arg_dstr_create();
    arg_print_glossary_gnu_ds(ds, argtable);
    fputs(arg_dstr_cstr(ds), fp);
    arg_dstr_destroy(ds);
}

/**
 * Checks the argtable[] array for NULL entries and returns 1
 * if any are found, zero otherwise.
 */
int arg_nullcheck(void** argtable) {
    struct arg_hdr** table = (struct arg_hdr**)argtable;
    int tabindex;
    /*printf("arg_nullcheck(%p)\n",argtable);*/

    if (!table)
        return 1;

    tabindex = 0;
    do {
        /*printf("argtable[%d]=%p\n",tabindex,argtable[tabindex]);*/
        if (!table[tabindex])
            return 1;
    } while (!(table[tabindex++]->flag & ARG_TERMINATOR));

    return 0;
}

/*
 * arg_free() is deprecated in favour of arg_freetable() due to a flaw in its design.
 * The flaw results in memory leak in the (very rare) case that an intermediate
 * entry in the argtable array failed its memory allocation while others following
 * that entry were still allocated ok. Those subsequent allocations will not be
 * deallocated by arg_free().
 * Despite the unlikeliness of the problem occurring, and the even unlikelier event
 * that it has any deliterious effect, it is fixed regardless by replacing arg_free()
 * with the newer arg_freetable() function.
 * We still keep arg_free() for backwards compatibility.
 */
void arg_free(void** argtable) {
    struct arg_hdr** table = (struct arg_hdr**)argtable;
    int tabindex = 0;
    int flag;
    /*printf("arg_free(%p)\n",argtable);*/
    do {
        /*
           if we encounter a NULL entry then somewhat incorrectly we presume
           we have come to the end of the array. It isn't strictly true because
           an intermediate entry could be NULL with other non-NULL entries to follow.
           The subsequent argtable entries would then not be freed as they should.
         */
        if (table[tabindex] == NULL)
            break;

        flag = table[tabindex]->flag;
        xfree(table[tabindex]);
        table[tabindex++] = NULL;

    } while (!(flag & ARG_TERMINATOR));
}

/* frees each non-NULL element of argtable[], where n is the size of the number of entries in the array */
void arg_freetable(void** argtable, size_t n) {
    struct arg_hdr** table = (struct arg_hdr**)argtable;
    size_t tabindex = 0;
    /*printf("arg_freetable(%p)\n",argtable);*/
    for (tabindex = 0; tabindex < n; tabindex++) {
        if (table[tabindex] == NULL)
            continue;

        xfree(table[tabindex]);
        table[tabindex] = NULL;
    };
}

#ifdef _WIN32
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
    return TRUE;
    UNREFERENCED_PARAMETER(hinstDLL);
    UNREFERENCED_PARAMETER(fdwReason);
    UNREFERENCED_PARAMETER(lpvReserved);
}
#endif


pe::Cedict => lindera_cc_cedict::load_dictionary()
                .map_err(|e| LinderaErrorKind::DictionaryNotFound.with_error(e))?,
        };

        let user_dictionary = match config.user_dict_path {
            Some(path) => Some(build_user_dict(
                config.dict_type,
                path,
                config.user_dict_type,
            )?),
            None => None,
        };

        let tokenizer = Tokenizer {
            dictionary,
            user_dictionary,
            mode: config.mode,
        };

        Ok(tokenizer)
    }

    /// Returns an array of offsets that mark the beginning of each tokens,
    /// in bytes.
    ///
    /// For instance
    /// e.g. "僕は'
    ///
    /// returns the array `[0, 3]`
    ///
    /// The array, always starts with 0, except if you tokenize the empty string,
    /// in which case an empty array is returned.
    ///
    /// Whitespaces also count as tokens.
    pub(crate) fn tokenize_offsets(
        &self,
        text: &str,
        lattice: &mut Lattice,
    ) -> Vec<(usize, WordId)> {
        if text.is_empty() {
            return Vec::new();
        }

        let mode = LinderaCoreMode::from(self.mode.clone());

        lattice.set_text(
            &self.dictionary.dict,
            &self.user_dictionary.as_ref().map(|d| &d.dict),
            &self.dictionary.char_definitions,
            &self.dictionary.unknown_dictionary,
            text,
            &mode,
        );
        lattice.calculate_path_costs(&self.dictionary.cost_matrix, &mode);
        lattice.tokens_offset()
    }

    fn tokenize_without_split<'a>(
        &self,
        text: &'a str,
        tokens: &mut Vec<Token<'a>>,
        lattice: &mut Lattice,
    ) -> LinderaResult<()> {
        let offsets = self.tokenize_offsets(text, lattice);

        for i in 0..offsets.len() {
            let (token_start, word_id) = offsets[i];
            let token_stop = if i == offsets.len() - 1 {
                text.len()
            } else {
                let (next_start, _) = offsets[i + 1];
                next_start
            };
            tokens.push(Token {
                text: &text[token_start..token_stop],
                detail: self.word_detail(word_id)?,
            })
        }

        Ok(())
    }

    fn word_detail(&self, word_id: WordId) -> LinderaResult<Vec<String>> {
        if word_id.is_unknown() {
            return Ok(vec!["UNK".to_string()]);
        }

        let (words_idx_data, words_data) = if word_id.is_system() {
            (
                self.dictionary.words_idx_data.as_slice(),
                self.dictionary.words_data.as_slice(),
            )
        } else {
            (
                self.user_dictionary
                    .as_ref()
                    .ok_or_else(|| {
                        LinderaErrorKind::Content.with_error(anyhow::anyhow!("internal error."))
                    })?
                    .words_idx_data
                    .as_slice(),
                self.user_dictionary
                    .as_ref()
                    .ok_or_else(|| {
                        LinderaErrorKind::Content.with_error(anyhow::anyhow!("internal error."))
                    })?
                    .words_data
                    .as_slice(),
            )
        };
        let idx = LittleEndian::read_u32(&words_idx_data[4 * word_id.0 as usize..][..4]);
        let data = &words_data[idx as usize..];
        let word_detail = bincode::deserialize_from(data)
            .map_err(|err| LinderaErrorKind::Deserialize.with_error(anyhow::anyhow


.wp-block-latest-posts li > a:lang(sr-RS), .entry .entry-content .wp-block-latest-posts .wp-block-latest-posts__post-date:lang(sr-RS), .entry .entry-content .wp-block-verse:lang(sr-RS), .entry .entry-content .has-drop-cap:lang(sr-RS):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(sr-RS), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(sr-RS),
.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(sr-RS),
.entry .entry-content .wp-block-cover-image h2:lang(sr-RS),
.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(sr-RS),
.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(sr-RS),
.entry .entry-content .wp-block-cover h2:lang(sr-RS), .entry .entry-content .wp-block-audio figcaption:lang(sr-RS),
.entry .entry-content .wp-block-video figcaption:lang(sr-RS),
.entry .entry-content .wp-block-image figcaption:lang(sr-RS),
.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(sr-RS),
.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(sr-RS), .entry .entry-content .wp-block-file:lang(sr-RS), .entry .entry-content .wp-block-file .wp-block-file__button:lang(sr-RS), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(sr-RS), .wp-caption-text:lang(sr-RS), .gallery-caption:lang(sr-RS) {
  font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, sans-serif;
}

body:lang(tt-RU), button:lang(tt-RU),
input:lang(tt-RU),
select:lang(tt-RU),
optgroup:lang(tt-RU),
textarea:lang(tt-RU), .author-description .author-link:lang(tt-RU),
.comment-metadata:lang(tt-RU),
.comment-reply-link:lang(tt-RU),
.comments-title:lang(tt-RU),
.comment-author .fn:lang(tt-RU),
.discussion-meta-info:lang(tt-RU),
.entry-meta:lang(tt-RU),
.entry-footer:lang(tt-RU),
.main-navigation:lang(tt-RU),
.no-comments:lang(tt-RU),
.not-found .page-title:lang(tt-RU),
.error-404 .page-title:lang(tt-RU),
.post-navigation .post-title:lang(tt-RU),
.page-links:lang(tt-RU),
.page-description:lang(tt-RU),
.pagination .nav-links:lang(tt-RU),
.sticky-post:lang(tt-RU),
.site-title:lang(tt-RU),
.site-info:lang(tt-RU),
#cancel-comment-reply-link:lang(tt-RU),
h1:lang(tt-RU),
h2:lang(tt-RU),
h3:lang(tt-RU),
h4:lang(tt-RU),
h5:lang(tt-RU),
h6:lang(tt-RU), .page-title:lang(tt-RU), blockquote cite:lang(tt-RU), table:lang(tt-RU), .button:lang(tt-RU),
input:lang(tt-RU)[type="button"],
input:lang(tt-RU)[type="reset"],
input:lang(tt-RU)[type="submit"],


tailwind .h-16 {
  height: 4rem;
}

.tailwind .h-8 {
  height: 2rem;
}

.tailwind .h-4 {
  height: 1rem;
}

.tailwind .h-1 {
  height: 0.25rem;
}

.tailwind .h-40 {
  height: 10rem;
}

.tailwind .h-32 {
  height: 8rem;
}

.tailwind .h-80 {
  height: 20rem;
}

.tailwind .h-12 {
  height: 3rem;
}

.tailwind .h-7 {
  height: 1.75rem;
}

.tailwind .h-124 {
  height: 30rem;
}

.tailwind .h-24 {
  height: 6rem;
}

.tailwind .h-3 {
  height: 0.75rem;
}

.tailwind .h-1\/2 {
  height: 50%;
}

.tailwind .h-48 {
  height: 12rem;
}

.tailwind .h-64 {
  height: 16rem;
}

.tailwind .h-1\/3 {
  height: 33.333333%;
}

.tailwind .h-96 {
  height: 24rem;
}

.tailwind .h-auto {
  height: auto;
}

.tailwind .max-h-80 {
  max-height: 20rem;
}

.tailwind .min-h-screen {
  min-height: 100vh;
}

.tailwind .min-h-full {
  min-height: 100%;
}

.tailwind .w-full {
  width: 100%;
}

.tailwind .w-5 {
  width: 1.25rem;
}

.tailwind .w-1\/2 {
  width: 50%;
}

.tailwind .w-6 {
  width: 1.5rem;
}

.tailwind .w-auto {
  width: auto;
}

.tailwind .w-8 {
  width: 2rem;
}

.tailwind .w-48 {
  width: 12rem;
}

.tailwind .w-0 {
  width: 0px;
}

.tailwind .w-4 {
  width: 1rem;
}

.tailwind .w-1\/3 {
  width: 33.333333%;
}

.tailwind .w-20 {
  width: 5rem;
}

.tailwind .w-80 {
  width: 20rem;
}

.tailwind .w-10 {
  width: 2.5rem;
}

.tailwind .w-12 {
  width: 3rem;
}

.tailwind .w-7 {
  width: 1.75rem;
}

.tailwind .w-24 {
  width: 6rem;
}

.tailwind .w-11 {
  width: 2.75rem;
}

.tailwind .w-3 {
  width: 0.75rem;
}

.tailwind .w-max {
  width: -webkit-max-content;
  width: -moz-max-content;
  width: max-content;
}

.tailwind .w-64 {
  width: 16rem;
}

.tailwind .w-96 {
  width: 24rem;
}

.tailwind .w-72 {
  width: 18rem;
}

.tailwind .w-40 {
  width: 10rem;
}

.tailwind .w-56 {
  width: 14rem;
}

.tailwind .w-min {
  width: -webkit-min-content;
  width: -moz-min-content;
  width: min-content;
}

.tailwind .min-w-0 {
  min-width: 0px;
}

.tailwind .min-w-full {
  min-width: 100%;
}

.tailwind .max-w-7xl {
  max-width: 80rem;
}

.tailwind .max-w-3xl {
  max-width: 48rem;
}

.tailwind .max-w-


@mixin fight-note__plate_orange {
	.fight-note__plate-base {
		background: linear-gradient(135deg, rgb(210, 140, 20) 0%, rgb(190, 120, 20) 100%);
		box-shadow: inset 0 0 2px rgb(240, 160, 20);
	}
}

@mixin fight-note__plate_purple {
	.fight-note__plate-base {
		background: linear-gradient(135deg, rgb(110, 70, 180) 0%, rgb(90, 60, 150) 100%);
		box-shadow: inset 0 0 2px rgb(130, 80, 210);
	}
}

@mixin fight-note__plate_purple-blue {
	.fight-note__plate-base {
		background: linear-gradient(135deg, rgb(170, 30, 200) 0%, rgb(20, 100, 150) 100%);
		box-shadow: inset 0 0 2px rgba(255, 255, 255, 0.5);
	}
}

@mixin fight-note__plate_white {
	.fight-note__plate-base {
		background: linear-gradient(135deg, rgb(240, 240, 250) 0%, rgb(220, 225, 230) 100%);
		box-shadow: inset 0 0 2px rgb(255, 255, 255);
	}
	.fight-note__plate-content {
		color: rgb(20, 20, 20);
	}
}

// Effects.

@mixin fight-note__plate_rotate-right { .fight-note__plate-base { transform: rotateZ(4deg); } }
@mixin fight-note__plate_rotate-left { .fight-note__plate-base { transform: rotateZ(-4deg); } }
@mixin fight-note__plate_skew-right { .fight-note__plate-base { transform: skewX(-6deg); } }
@mixin fight-note__plate_skew-left { .fight-note__plate-base { transform: skewX(6deg); } }
@mixin fight-note__plate_skew-up { .fight-note__plate-base { transform: skewY(4deg); } }
@mixin fight-note__plate_skew-down { .fight-note__plate-base { transform: skewY(-4deg); } }
@mixin fight-note__plate_round-top-left { .fight-note__plate-base { border-top-left-radius: var(--effect-corner-round) !important; } }
@mixin fight-note__plate_round-top-right { .fight-note__plate-base { border-top-right-radius: var(--effect-corner-round) !important; } }
@mixin fight-note__plate_round-bottom-left { .fight-note__plate-base { border-bottom-left-radius: var(--effect-corner-round) !important; } }
@mixin fight-note__plate_round-bottom-right { .fight-note__plate-base { border-bottom-right-radius: var(--effect-corner-round) !important; } }

// Special.

.fight-note {
	&__input-common-stance {
		@include fight-note__plate_red;
		@include fight-note__plate_skew-left;
	}

	&__input-special-move {
		@include fight-note__plate_red;
		@include fight-note__plate_skew-right;
	}
}

// Specific.

.fight-note {
	&__input-specific-move {
		@include fight-note__plate_white;
	}

	&__input-specific-action {
		@include fight-note__plate_blue;
		@include fight-note__plate_skew-up;
	}
}

// Shortcut.

.fight-note {
	&__input-specific-shortcut {
		@include fight-note__plate_white;
		display: flex;

		&:hover {
			//outline: 2px solid rgb(41, 45, 64);
			//


20b13e4] (=Unknown_210101c)
	mov     r2, #0x48
	bl      MIi_CpuSend32
branch_20b133c: @ 20b133c :arm
	cmp     r8, #0x3
	movne   r0, #0x0
	bne     branch_20b1368
	ldr     r1, [r10, #0x8]
	mov     r0, r10
	bic     r1, r1, #0x40
	str     r1, [r10, #0x8]
	ldr     r1, [r10, #0x2c]
	blx     r1
	ldr     r0, [r10, #0x8]
	and     r0, r0, #0x40
branch_20b1368: @ 20b1368 :arm
	cmp     r9, #0x20
	cmpne   r9, #0x60
	bne     branch_20b13a8
	cmp     r0, #0x0
	add     r5, r5, #0x1
	bne     branch_20b13a8
	ldr     r0, [r10, #0x8]
	tst     r0, #0x100
	bne     branch_20b13a8
	ldr     r0, [r10]
	add     r1, sp, #0x0
	ldrb    r3, [r0, #0x2]
	mov     r0, #0x13
	mov     r2, #0x1
	str     r3, [sp]
	bl      Function_20b275c
branch_20b13a8: @ 20b13a8 :arm
	ldr     r0, [r10]
	add     r0, r0, r5
	str     r0, [r10]
	add     sp, sp, #0xc8
	ldmfd   sp!, {r3-r11,pc}
@ 0x20b13bc

.word Unknown_210104c @ 0x20b13bc
.word Unknown_2101058 @ 0x20b13c0
.word Unknown_2101028 @ 0x20b13c4
.word 0x151110 @ 0x20b13c8
.word GFX_FIFO @ 0x20b13cc
.word RAM_21c5a8c @ 0x20b13d0
.word RAM_21c5ad8 @ 0x20b13d4
.word 0x171012 @ 0x20b13d8
.word Unknown_2101020 @ 0x20b13dc
.word 0x1b19 @ 0x20b13e0
.word Unknown_210101c @ 0x20b13e4

.arm
Function_20b13e8: @ 20b13e8 :arm
	stmfd   sp!, {r4-r11,lr}
	sub     sp, sp, #65, 30 @ #0x104
	ldr     r1, [r0, #0x4]
	ldr     r6, [r0]
	ldr     r7, [r1, #0x4]
	ldrb    r2, [r6, #0x2]
	ldr     r3, [r7, #0x10]
	mov     r5, #0x0
	str     r0, [sp]
	str     r2, [sp, #0x10]
	add     r3, r7, r3
	add     r1, sp, #0xb0
	mov     r0, r5
	mov     r2, #0x54
	mov     r4, r5
	str     r3, [sp, #0x14]
	add     r6, r6, #0x3
	bl      MIi_CpuClearFast
	bl      Function_20b2628
	mov     r0, r5
	ldr     r1, [pc, #0x6f4] @ [0x20b1b34] (=MATRIX


/**
* @verbatim
* edje_cc basic2.edc && gcc -o edje-basic2 edje-basic2.c `pkg-config --libs --cflags evas ecore ecore-evas edje`
* @endverbatim
*/

#ifdef HAVE_CONFIG_H
# include "config.h"
#else
# define EINA_UNUSED
#endif

#ifndef PACKAGE_DATA_DIR
#define PACKAGE_DATA_DIR "."
#endif

#include <stdio.h>

#include <Eina.h>
#include <Ecore.h>
#include <Ecore_Evas.h>
#include <Edje.h>

#define WIDTH  (700)
#define HEIGHT (700)

#define WALK 10

static const char commands[] = "commands are:\nEsc - Exit\nUp - move image up\nDown - move image down\n"\
    "Right - move image to right\nLeft - move image to left\n";

static void
_on_key_down(void *data,
	      Evas *evas EINA_UNUSED,
	      Evas_Object *o EINA_UNUSED,
	      void *einfo)
{
  Evas_Event_Key_Down *ev;
  Evas_Object *edje_obj;
  int x,y;

  ev = (Evas_Event_Key_Down *)einfo;
  edje_obj = (Evas_Object *)data;

  evas_object_geometry_get(edje_obj, &x, &y, NULL, NULL);

  if(strcmp(ev->key,"Escape") == 0)
  {
	ecore_main_loop_quit();
  }
  else if(strcmp(ev->key, "Down") == 0)
  {
	y+=WALK;
  }
  else if(strcmp(ev->key, "Up") == 0)
  {
	y-=WALK;
  }
  else if(strcmp(ev->key, "Right") == 0)
  {
	x+=WALK;
  }
  else if(strcmp(ev->key, "Left") == 0)
  {
	x-=WALK;
  }
  else
  {
     printf("Key %s not supported.\nCommands:%s", ev->key, commands);
     return;
  }

  evas_object_move(edje_obj, x, y);
}

static void
_on_delete(Ecore_Evas *ee EINA_UNUSED)
{
   ecore_main_loop_quit();
}

int
main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
{
  const char *edje_file = PACKAGE_DATA_DIR"/basic2.edj";
  Ecore_Evas *ee;
  Evas *evas;
  Evas_Object *bg;
  Evas_Object *edje_obj;

  if(!ecore_evas_init())
	return EXIT_FAILURE;

  if(!edje_init())
	goto shutdown_ecore_evas;

  ee = ecore_evas_new(NULL, 0, 0, WIDTH, HEIGHT, NULL);

  if(!ee) goto shutdown_edje;

  ecore_evas_callback_delete_request_set(ee, _on_delete);
  ecore_evas_title_set(ee, "Edje show image");

  evas = ecore_evas_get(ee);

  bg = evas_object_rectangle_add(evas);
  evas_object_color_set(bg, 255, 255, 255, 255); //White
  evas_object_move(bg, 0, 0); //orign
  evas_object_resize(bg, WIDTH, HEIGHT); //cover the window
  evas_object_show(bg);

  ecore_evas_object_associate(ee, bg, ECORE_EVAS_OBJECT_ASSOCIATE_BASE);
  evas_object_focus_set(bg, EINA_TRUE);

  edje_obj = edje_object_add(evas);

  if(!edje_object_file_set(edje_obj, edje_file, "image_group"))
  {
    int err = edje_object_load_error_get(edje_obj);
    const char *errmsg = edje_load_error_str(err);
    fprintf(stderr, "Could not load the edje file - reason:%s\n", errmsg);
    goto shutdown_edje;
  }

  evas_object_move(edje_obj, 50, 50);
  evas_object_resize(edje_obj, 64, 64);
  evas_object_show(edje_obj);

  evas_object_event_callback_add(bg, EVAS_CALLBACK_KEY_DOWN, _on_key_down, edje_obj);

  ecore_evas_show(ee);

  printf("%s", commands);

  ecore_main_loop_begin();

  ecore_evas_free(ee);
  edje_shutdown();
  ecore_evas_shutdown();

  return EXIT_SUCCESS;

shutdown_edje:
  edje_shutdown();

shutdown_ecore_evas:
  ecore_evas_shutdown();

  return EXIT_FAILURE;
}


6 0c-.6 0-1.1-.1-1.6-.1c-1.1-.1-2.1-.3-3.2-.5c-2.1-.4-4.1-1.1-6-1.9c-3.8-1.6-7.3-4-10.2-6.9s-5.2-6.3-6.9-10.2c-.8-1.9-1.4-3.9-1.9-6c-.2-1.1-.4-2.3-.5-3.5c0-.3 0-.6-.1-.8c0-.2 0-.4 0-.7c0-.4 0-.7 0-.7c0-.5 0-.7 0-.9c0-.3 0-.6 0-.9c0 0 0-.3 0-.7c0-.2 0-.4 0-.7c0-.2 0-.4 .1-.8c0-.3 .1-.6 .1-.9c0-.2 .1-.4 .1-.7c.1-.8 .2-1.2 .3-1.7c.5-2.2 1.1-4.2 1.9-6.1c1.6-3.8 4-7.3 6.9-10.2c5.8-5.8 13.8-9.4 22.6-9.4l26.2 0c3.8-29.6 5.8-62.1 5.8-96c0-18.3-.6-36.1-1.7-53.4c-1.7-1.2-3.4-2.5-4.9-4c-.8-.8-1.6-1.6-2.2-2.5s-1.3-1.7-1.9-2.6c-1.2-1.8-2.1-3.6-2.9-5.5s-1.4-3.9-1.8-5.9c-.2-1-.3-2-.4-3s-.1-2-.2-3c0-8.3 3.1-16.5 9.4-22.8C141 63.1 112.8 0 80 0C35.8 0 0 114.6 0 256z", "M416 48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM221.7 175.5c9.9-9.9 23.4-15.5 37.5-15.5c1.9 0 3.8 .1 5.6 .3L233.6 254c-9.3 28 1.7 58.8 26.8 74.5l86.2 53.9-25.4 88.8c-4.9 17 5 34.7 22 39.6s34.7-5 39.6-22l28.7-100.4c5.9-20.6-2.6-42.6-20.7-53.9L334 299l30.9-82.4 5.1 12.3C385 264.7 419.9 288 458.7 288l21.3 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-21.3 0c-12.9 0-24.6-7.8-29.5-19.7l-6.3-15c-14.6-35.1-44.1-61.9-80.5-73.1l-48.7-15c-11.1-3.4-22.7-5.2-34.4-5.2c-31 0-60.8 12.3-82.7 34.3l-23.1 23.1c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l23.1-23.1zM187.2 352L128 352c-17.7 0-32 14.3-32 32s14.3 32 32 32l69.6 0c19 0 36.2-11.2 43.9-28.5L253 361.6l-9.5-6c-17.5-10.9-30.5-26.8-37.9-44.9L187.2 352z"]],
    "plane-arrival": [640, 512, [128748], "f5af", ["M0 480c0-17.7 14.3-32 32-32l576 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 512c-17.7 0-32-14.


的，而且是充满了仇恨的。

   退团后，在班上拉小圈子，组织落后小集团，发表反动言论，研究自杀的方法，与党团及班会闹对立。扬言“有本事的，在学习上来竞赛，何必定说政治！”又说：“自己绝口不说入党，也不愿听别人说入党”。可见他对党的仇恨之深。他的行为，对党的发展组织工作及班上的工作，起了很大的破坏作用，产生了极恶劣的影响。

   “三反”中，他弟弟是个贪污犯，被斗争过。于是黄就长期怀恨在心，说“冤枉”了他的弟弟，搞得“过火”。肃反中，组织上对黄的历史进行了审查，于是黄对党的仇恨更深了，他说肃反“太残酷”、“打击面过宽”、“不掌握材料，一味逼供”。他又说：“一提起云大就寒心”。

   黄謇对我们的社会主义是极端仇恨的，因为，这个社会不能让他“自由竞争”，不能让他往上爬，骑在人民头上，因此，当他看到旧社会已一去不复返，新社会一天比一天发展和巩固时，他就灰心消极，想自杀。他在读书时想过自杀，在毕业后也想过自杀，还想以慢性自杀毁灭自己。

   1956年大学毕业后，留在中文系做助教，党对他的这种信任并不能解除他对党的仇恨，因此，对工作一直采取消极冷淡的不合作态度。他把他对党对社会主义的深沉的仇恨，隐蔽在所谓“灰色的人生观”的外衣之下。

   可是，当右派分子向党和人民发动了猖狂进攻，新中国的天空曾一度乌云滚滚时，黄謇却一点也不“灰色”了。他向党、向学校发出了恶毒的攻击，还积极夥同右派分子陈红映组织反动小集团，策划于密室，写大字报，阴谋搞大民主。

   黄謇在政治上是老练、狡滑、阴险的，他善于隐蔽自己，善于察颜观色，看风转舵，使人摸不到他的底。然而，狐狸尾巴总是藏不住的，尽管他隐蔽得多么巧妙，在这次大风浪中，他毕竟是露出原形来了，他的反党反人民反社会主义的凶恶面目，终于被揭穿了。

   来源：《右派言行集（上集）（全校教职工中部分右派言行）》（中共云南大学委员会，一九五七年九月）。

    [返回索引页面]

   Copyright (C)  2024  Marxist-Leninist-Maoist.

   Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no


opy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package commands

import (
	"fmt"
	"os"

	"github.com/GoogleContainerTools/kaniko/pkg/dockerfile"

	"github.com/GoogleContainerTools/kaniko/pkg/util"
	v1 "github.com/google/go-containerregistry/pkg/v1"
	"github.com/moby/buildkit/frontend/dockerfile/instructions"
	"github.com/sirupsen/logrus"
)

type VolumeCommand struct {
	BaseCommand
	cmd *instructions.VolumeCommand
}

func (v *VolumeCommand) ExecuteCommand(config *v1.Config, buildArgs *dockerfile.BuildArgs) error {
	logrus.Info("Cmd: VOLUME")
	volumes := v.cmd.Volumes
	replacementEnvs := buildArgs.ReplacementEnvs(config.Env)
	resolvedVolumes, err := util.ResolveEnvironmentReplacementList(volumes, replacementEnvs, true)
	if err != nil {
		return err
	}
	existingVolumes := config.Volumes
	if existingVolumes == nil {
		existingVolumes = map[string]struct{}{}
	}
	for _, volume := range resolvedVolumes {
		var x struct{}
		existingVolumes[volume] = x
		util.AddVolumePathToIgnoreList(volume)

		// Only create and snapshot the dir if it didn't exist already
		if _, err := os.Stat(volume); os.IsNotExist(err) {
			logrus.Infof("Creating directory %s", volume)
			if err := os.MkdirAll(volume, 0755); err != nil {
				return fmt.Errorf("could not create directory for volume %s: %w", volume, err)
			}
		}
	}
	config.Volumes = existingVolumes

	return nil
}

func (v *VolumeCommand) FilesToSnapshot() []string {
	return []string{}
}

func (v *VolumeCommand) String() string {
	return v.cmd.String()
}
/*
Copyright 2018 Google LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package commands

import (
	"github.com/GoogleContainerTools/kaniko/pkg/dockerfile"
	"github.com/GoogleContainerTools/kaniko/pkg/util"
	v1 "github.com/google/go-containerregistry/pkg/v1"
	"github.com/moby/buildkit/frontend/dockerfile/instructions"
	"github.com/moby/sys/signal"
	"github.com/sirupsen/logrus"
)

type StopSignalCommand struct {
	BaseCommand
	cmd *instructions.StopSignalCommand
}

// ExecuteCommand handles command processing similar to CMD and RUN,
func (s *StopSignalCommand) ExecuteCommand(config *v1.Config, buildArgs *dockerfile.BuildArgs) error {
	logrus.Info("Cmd: STOPSIGNAL")

	// resolve possible environment variables
	replacementEnvs := buildArgs.ReplacementEnvs(config.Env)
	resolvedEnvs, err := util.ResolveEnvironmentReplacementList([]string{s.cmd.Signal}, replacementEnvs, false)
	if err != nil {
		return err
	}
	stopsignal := resolvedEnvs[0]


ups for resources.
The main macro loads a series of variables, each naming a resource; that resource can then be identified
throughout the mod via that variable. Resources live in lib/resource_id.

Public functions

indirect_load action_macro

Load the various variables in resource_id, checking for duplicates and prebuilding any listed duplicates

install_script(inline:i, script:s, location:s, locbase:s, path:s)=() action

<title>lib_bam function library</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="../../doc/files/g3readme_cam_022916_dwedit.css" type="text/css" />
<link href="../../doc/files/g3icon.ico" rel="icon" type="image/bmp" />

lib_bam function library

Dependencies: lib_2da, lib_anon, lib_array, lib_fn, lib_ini, lib_sfo, lib_sugar, lib_tools, lib_ui

Description

Various editors for BAM files.

Public functions

bam_get_available_mos_index(current:i)=(value:s) action

Find the first unused filename of form mosxxxx.pvrz (where xxxx is an integer padded to 4 digits), starting with mos0000.pvrz.

This function is exposed (not internal) because it's used in some lib_mos functions.

bam_install_v2(lowest_mos_index:i, bam_name:s, path:s, location:s, locbase:s, pvrz_path:s="MOD_FOLDER/sfo", pvrz_location:s="%location%", pvrz_locbase:s="%locbase%")=() action

Installer for v2 BAMs. Feed it the lowest mos index you want to try, the name and location of the bam file to be installed (given by path/location/locbase),
and the location of all the pvrz files associated with the bam (given by pvrz_path,pvrz_location,pvrz_locbase, but defaulting to the bam version in each case)

bam_pad_to_four(arguments:i)=(value:s) action

Given an integer argument<10,000, return a 4-digit string of that number, padded out with zeroes at the start i


 l = this.layer && this.layer.options.opacity;
	                Dn(l) && (l = 1), s *= l;
	            }
	            Cu[0] = e || 0, Cu[1] = n || 0;
	            var c = Zl(Mu);
	            Gl(c, c, Cu), Vl(c, c, [ o, o, 1 ]), Ul(c, this.getMap().projViewMatrix, c), h.uniformMatrix4fv(this.program.u_matrix, !1, c),
	            h.uniform1f(this.program.u_opacity, s), h.uniform1f(this.program.u_debug_line, 0);
	            var u = t.glBuffer;
	            !u || u.width === i && u.height === r || (this.saveImageBuffer(u), delete t.glBuffer),
	            t.glBuffer ? h.bindBuffer(h.ARRAY_BUFFER, u) : t.glBuffer = this.bufferTileData(0, 0, i, r),
	            wu[0] = "a_position", wu[1] = 2, wu[2] = t.glBuffer.type, this.enableVertexAttrib(wu),
	            h.drawArrays(h.TRIANGLE_STRIP, 0, 4), a && this.drawDebug(c, 0, 0, i, r, a);
	        }, n.drawDebug = function(t, e, n, i, r, o) {
	            var s = this.gl;
	            s.bindBuffer(s.ARRAY_BUFFER, this._debugBuffer), this.enableVertexAttrib([ "a_position", 2, "FLOAT" ]),
	            s.bufferData(s.ARRAY_BUFFER, new Float32Array([ e, n, e + i, n, e + i, n - r, e, n - r, e, n ]), s.DYNAMIC_DRAW),
	            s.uniformMatrix4fv(this.program.u_matrix, !1, t), s.uniform1f(this.program.u_opacity, 1),
	            s.uniform1f(this.program.u_debug_line, 1), s.drawArrays(s.LINE_STRIP, 0, 5);
	            var a = this._debugInfoCanvas;
	            if (!a) {
	                var h = this.getMap().getDevicePixelRatio() > 1 ? 2 : 1;
	                (a = this._debugInfoCanvas = document.createElement("canvas")).width = 256 * h,
	                a.height = 32 * h;
	                var l = a.getContext("2d");
	                l.font = "20px monospace", l.scale(h, h);
	            }
	            var c = a.getContext("2d");
	            c.clearRect(0, 0, a.width, a.height), qo.fillText(c, o, Tu, this.layer.options.debugOutline),
	            this.loadTexture(a), s.texImage2D(s.TEXTURE_2D, 0, s.RGBA, s.RGBA, s.UNSIGNED_BYTE, a);
	            var u = e + (i = 256), f = n - r + 32, d = n - r;
	            s.bufferData(s.ARRAY_BUFFER, this.set8(e, f, e, d, u, f, u, d), s.DYNAMIC_DRAW),
	            s.uniform1f(this.program.u_debug_line, 0), s.drawArrays(s.TRIANGLE_STRIP, 0, 4);
	        }, n.bufferTileData = function(t, e, n, i, r) {
	            var o, s = t, a = t + n, h = e, l = e - i;
	            o = zn(s) && zn(a) && zn(h) && zn(l) ? this.set8Int(s, h, s, l, a, h, a, l) : this.set8(s, h, s, l, a, h, a, l);
	            var c = this.loadImageBuffer(o, r);
	            return c.width = n, c.height = i, c.type = o instanceof Int16Array ? "SHORT" : "FLOAT",
	            c;
	        }, n.drawTinImage


the receiver is free to adapt
// in the range (x, y) based on network jitter.
struct VideoPlayoutDelay {
  VideoPlayoutDelay() = default;
  VideoPlayoutDelay(int min_ms, int max_ms) : min_ms(min_ms), max_ms(max_ms) {}
  int min_ms = -1;
  int max_ms = -1;

  bool operator==(const VideoPlayoutDelay& rhs) const {
    return min_ms == rhs.min_ms && max_ms == rhs.max_ms;
  }
};

// TODO(bugs.webrtc.org/7660): Old name, delete after downstream use is updated.
using PlayoutDelay = VideoPlayoutDelay;

}  // namespace webrtc

#endif  // API_VIDEO_VIDEO_TIMING_H_


_DragManager_PageDragStart_System_Object_ComponentFactory_Krypton_Navigator_KryptonNavigator_ComponentFactory_Krypton_Navigator_PageDragCancelEventArgs_">DragManager.PageDragStart(Object, KryptonNavigator, PageDragCancelEventArgs)

      DragManager.PageDragMove(Object, PointEventArgs)

      DragManager.PageDragEnd(Object, PointEventArgs)

      DragManager.PageDragQuit(Object)

      DragManager.CreateDropData(PageDragEndData)

      DragManager.UpdateCursor()

      DragManager.RestoreCursor()

      System.Object.ToString()

      System.Object.Equals(System.Object)

      System.Object.Equals(System.Object, System.Object)

      System.Object.ReferenceEquals(System.Object, System.Object)

      System.Object.GetHashCode()

      System.Object.GetType()

      System.Object.MemberwiseClone()

Namespace: System.Dynamic.ExpandoObject

Assembly: Krypton Docking.dll

Syntax

public class DockingDragManager : DragManager, IDragPageNotify, IDisposable, IFloatingMessages, IMessageFilter

Constructors

  <h4 id="ComponentFactory_Krypton_Docking_Doc


5], 21, 0xfc93a039);
            a = r4(a, b, c, d, temp[12], 6, 0x655b59c3);
            d = r4(d, a, b, c, temp[3], 10, 0x8f0ccc92);
            c = r4(c, d, a, b, temp[10], 15, 0xffeff47d);
            b = r4(b, c, d, a, temp[1], 21, 0x85845dd1);
            a = r4(a, b, c, d, temp[8], 6, 0x6fa87e4f);
            d = r4(d, a, b, c, temp[15], 10, 0xfe2ce6e0);
            c = r4(c, d, a, b, temp[6], 15, 0xa3014314);
            b = r4(b, c, d, a, temp[13], 21, 0x4e0811a1);
            a = r4(a, b, c, d, temp[4], 6, 0xf7537e82);
            d = r4(d, a, b, c, temp[11], 10, 0xbd3af235);
            c = r4(c, d, a, b, temp[2], 15, 0x2ad7d2bb);
            b = r4(b, c, d, a, temp[9], 21, 0xeb86d391);

            ABCDValue.A = unchecked(a + ABCDValue.A);
            ABCDValue.B = unchecked(b + ABCDValue.B);
            ABCDValue.C = unchecked(c + ABCDValue.C);
            ABCDValue.D = unchecked(d + ABCDValue.D);
            return;
        }

        //Manually unrolling these equations nets us a 20% performance improvement
        private static uint r1(uint a, uint b, uint c, uint d, uint x, int s, uint t)
        {
            //                  (b + LSR((a + F(b, c, d) + x + t), s))
            //F(x, y, z)        ((x & y) | ((x ^ 0xFFFFFFFF) & z))
            return unchecked(b + LSR((a + ((b & c) | ((b ^ 0xFFFFFFFF) & d)) + x + t), s));
        }

        private static uint r2(uint a, uint b, uint c, uint d, uint x, int s, uint t)
        {
            //                  (b + LSR((a + G(b, c, d) + x + t), s))
            //G(x, y, z)        ((x & z) | (y & (z ^ 0xFFFFFFFF)))
            return unchecked(b + LSR((a + ((b & d) | (c & (d ^ 0xFFFFFFFF))) + x + t), s));
        }

        private static uint r3(uint a, uint b, uint c, uint d, uint x, int s, uint t)
        {
            //                  (b + LSR((a + H(b, c, d) + k + i), s))
            //H(x, y, z)        (x ^ y ^ z)
            return unchecked(b + LSR((a + (b ^ c ^ d) + x + t), s));
        }

        private static uint r4(uint a, uint b, uint c, uint d, uint x, int s, uint t)
        {
            //                  (b + LSR((a + I(b, c, d) + k + i), s))
            //I(x, y, z)        (y ^ (x | (z ^ 0


,epochs = 10)
        classifier.save_weights('model_weights.h5')
        model_json = classifier.to_json()
        with open("model.json", "w") as json_file:
            json_file.write(model_json)
        print(X.class_indices)
        print(classifier.summary)
        messagebox.showinfo("Model Generated", "NLBPNet Model Generated on Train & Test Data. See black console for details")

def classify():
    name = os.path.basename(filename)
    image_file = filename;
    img_bgr = cv2.imread(image_file)
    height, width, channel = img_bgr.shape
    img_gray = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2GRAY)
    img_lbp = np.zeros((height, width,3), np.uint8)
    for i in range(0, height):
        for j in range(0, width):
            img_lbp[i, j] = lbp_calculated_pixel(img_gray, i, j)
    cv2.imwrite('testimages/lbp_'+name, img_lbp)
    img = cv2.imread('testimages/lbp_'+name)
    img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    img = np.resize(img, (48,48,1))
    im2arr = np.array(img)
    im2arr = im2arr.reshape(1,48,48,1)
    preds = loaded_model.predict(im2arr)
    print(str(preds)+" "+str(np.argmax(preds)))
    predict = np.argmax(preds)
    msg = ""
    if predict == 0:
        msg = "Image Contains Forgery face Image"
    if predict == 1:
        msg = "Image Contains Real face Image"
    imagedisplay = cv2.imread(filename)
    orig = imagedisplay.copy()
    output = imutils.resize(orig, width=400)
    cv2.putText(output, msg, (10, 25),  cv2.FONT_HERSHEY_SIMPLEX,0.7, (139, 0, 0), 2)
    cv2.imshow("Predicted Image Result ", output)
    imagedisplay = cv2.imread('testimages/lbp_'+name)
    orig = imagedisplay.copy()
    output = imutils.resize(orig, width=400)
    os.remove('testimages/lbp_'+name)
    cv2.imshow("LBP Image", output)
    cv2.waitKey(0)

def exit():
    global main
    main.destroy()

font = ('times', 16, 'bold')
title = Label(main, text='Image Forgery Detection Using Deep Learning', justify=LEFT)
title.config(bg='lavender', fg='DarkOrchid1')
title.config(font=font)
title.config(height=3, width=120)
title.place(x=100,y=5)
title.pack()

font1 = ('times', 14, 'bold')
model = Button(main, text="Generate image Train & Test Model", command=generateModel)
model.place(x=200,y=100)
model.config(font=font1)

uploadimage = Button(main, text="Upload Test Image", command=upload)
uploadimage.place(x=200,y=150)
uploadimage.config(font=font1)

classifyimage = Button(main, text="Classify Picture In Image", command=classify)
classifyimage.place(x=200,y=200)
classifyimage.config(font=font1)

exitapp = Button(main, text="Exit", command=exit)
exitapp.place(x=200,y=250)
exitapp.config(font=font1)

main.config(bg='light blue')
main.mainloop()


Playfair Display Italic'), local(PlayfairDisplay-Italic), url(https://fonts.gstatic.com/s/playfairdisplay/v10/9MkijrV-dEJ0-_NWV7E6N3L1iaS4euO_B3wJG_mMktU.woff2) format("woff2");
    unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF
}

@font-face {
    font-family: 'Playfair Display';
    font-style: italic;
    font-weight: 400;
    src: local('Playfair Display Italic'), local(PlayfairDisplay-Italic), url(https://fonts.gstatic.com/s/playfairdisplay/v10/9MkijrV-dEJ0-_NWV7E6NwXiAI3F8adTt8b-_w2WoPM.woff2) format("woff2");
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000
}

@font-face {
    font-family: 'Playfair Display';
    font-style: italic;
    font-weight: 700;
    src: local('Playfair Display Bold Italic'), local(PlayfairDisplay-BoldItalic), url(https://fonts.gstatic.com/s/playfairdisplay/v10/n7G4PqJvFP2Kubl0VBLDEMjNOE6OIchc6xEWGp4AFzI.woff2) format("woff2");
    unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116
}

@font-face {
    font-family: 'Playfair Display';
    font-style: italic;
    font-weight: 700;
    src: local('Playfair Display Bold Italic'), local(PlayfairDisplay-BoldItalic), url(https://fonts.gstatic.com/s/playfairdisplay/v10/n7G4PqJvFP2Kubl0VBLDEGfg93gVtA75Tg3Rp7v1E0k.woff2) format("woff2");
    unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF
}

@font-face {
    font-family: 'Playfair Display';
    font-style: italic;
    font-weight: 700;
    src: local('Playfair Display Bold Italic'), local(PlayfairDisplay-BoldItalic), url(https://fonts.gstatic.com/s/playfairdisplay/v10/n7G4PqJvFP2Kubl0VBLDEBZeN5y77JNHCKkhVNuYRJ4.woff2) format("woff2");
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000
}

@font-face {
    font-family: Dosis;
    font-style: normal;
    font-weight: 400;
    src: local('Dosis Regular'), local(Dosis-Regular), url(https://fonts.gstatic.com/s/dosis/v4/RlBXAIuiO5GvH9


 1;
    if (start < 0) start = str.length + start + 1;
    end = min(end, str.length);
    if (end < 0) end = str.length + end + 1;

    return start > end ? [] : str.substring(start - 1, end).codeUnits;
  };

  string["lower"] = (List<dynamic> args) {
    return [args[0].toLowerCase()];
  };
}
import 'package:hydro_sdk/cfr/util.dart';
import 'package:hydro_sdk/cfr/vm/context.dart';
import 'package:hydro_sdk/cfr/vm/table.dart';
import 'package:hydro_sdk/hydroState.dart';

void loadTableLib({required HydroState hydroState, required Context ctx}) {
  var table = new HydroTable();

  ctx.env["table"] = table;

  table["concat"] = (List<dynamic> args) {
    HydroTable t = Context.getArg1<HydroTable>(args, 0, "concat");
    var delim = Context.luaToString(
        maybeAt(
              args,
              1,
            ) ??
            "",
        hydroState: hydroState);
    num s =
        maybeAt(args, 2) == null ? 1 : Context.getArg1<num>(args, 2, "concat");
    num e = maybeAt(args, 3) == null
        ? t.length
        : Context.getArg1<num>(args, 3, "concat");

    var o = new StringBuffer();
    for (int i = s.floor(); i <= e.floor(); i++) {
      if (i != s.floor()) o.write(delim);
      var e = t.rawget(i);
      if (e == null)
        throw "invalid value (nil) at index $i in table for 'concat'";
      o.write(Context.luaToString(e, hydroState: hydroState));
    }

    return [o];
  };

  table["insert"] = (List<dynamic> args) {
    if (args.length < 2 || args.length > 3)
      throw "wrong number of arguments to 'insert";

    HydroTable t = Context.getArg1<HydroTable>(args, 0, "insert");
    var len = t.length;

    var v = args[args.length < 3 ? 1 : 2];
    int pos = args.length < 3
        ? len + 1
        : Context.getArg1<num>(args, 1, "insert").floor();
    if (pos > len || pos < 0)
      throw "bad argument #2 to 'insert' (position out of bounds)";

    for (int i = len + 1; i > pos; i--) t.rawset(i, t.rawget(i - 1));
    t.rawset(pos, v);

    return [];
  };

  table["maxn"] = (List<dynamic> args) {
    HydroTable t = Context.getArg1<HydroTable>(args, 0, "maxn");
    return [
      t.map.keys.fold(t.length, (dynamic s, e) => e is num && e > s ? e : s)
    ];
  };

  table["remove"] = (List<dynamic> args) {
    HydroTable t = Context.getArg1<HydroTable>(args, 0, "remove");
    int pos = maybeAt(args, 1) == null
        ? t.length
        : Context.getArg1<num>(args, 1, "remove").floor();

    var len = t.length;

    if (pos > len || pos < 0)
      throw "bad argument #2 to 'remove' (position out of bounds)";

    for (int i = pos; i <= len; i++) {
      t.rawset(i, t.rawget(i + 1));
    }

    t.rawset(len, null);

    return [];
  };

  table["sort"] = (List<dynamic> args) {
    HydroTable t = Context.getArg1<HydroTable>(args, 0, "maxn");
    LuaDartFunc? f = maybeAt(args, 1) == null
        ? null


-- See LICENSE for terms

if not g_AvailableDlc.picard then
	print(CurrentModDef.title, ": Below & Beyond DLC not installed! Abort!")
	return
end

local bb_dlc = g_AvailableDlc.picard

local mod_EnableMod
local mod_RocksChance
local mod_MetalsChance
local mod_RareMetalsChance
local mod_ExoticMineralsChance
local mod_PolymersChance
local mod_AnomalyChance

local function ModOptions(id)
	-- Id is from ApplyModOptions
	if id and id ~= CurrentModId then
		return
	end

	mod_EnableMod = CurrentModOptions:GetProperty("EnableMod")
	mod_RocksChance = CurrentModOptions:GetProperty("RocksChance")
	mod_MetalsChance = CurrentModOptions:GetProperty("MetalsChance")
	mod_RareMetalsChance = CurrentModOptions:GetProperty("RareMetalsChance")
	mod_ExoticMineralsChance = CurrentModOptions:GetProperty("ExoticMineralsChance")
	mod_PolymersChance = CurrentModOptions:GetProperty("PolymersChance")
	mod_AnomalyChance = CurrentModOptions:GetProperty("AnomalyChance")
end
-- Load default/saved settings
OnMsg.ModsReloaded = ModOptions
-- Fired when Mod Options>Apply button is clicked
OnMsg.ApplyModOptions = ModOptions

local ChoOrig_GenerateMeteor = GenerateMeteor
function GenerateMeteor(...)
	if not mod_EnableMod then
		return ChoOrig_GenerateMeteor(...)
	end

	local result, meteor = pcall(ChoOrig_GenerateMeteor, ...)
	if result then
		local chance = SessionRandom:Random(100)

		if chance < mod_RocksChance then
			meteor.deposit_type = "Rocks"
		elseif chance < mod_RocksChance + mod_MetalsChance then
			meteor.deposit_type = "Metals"
		elseif chance < mod_RocksChance + mod_MetalsChance + mod_PolymersChance then
			meteor.deposit_type = "Polymers"
		elseif chance < mod_RocksChance + mod_MetalsChance + mod_PolymersChance + mod_RareMetalsChance then
			meteor.deposit_type = "PreciousMetals"
		elseif chance < mod_RocksChance + mod_MetalsChance + mod_PolymersChance + mod_RareMetalsChance + mod_ExoticMineralsChance then
			if bb_dlc then
				meteor.deposit_type = "PreciousMinerals"
			else
				meteor.deposit_type = "PreciousMetals"
			end
		else
			meteor.deposit_type = "Anomaly"
		end
	end

	return meteor
end

-- I could add new prefabs, or I could just override the func and change the resource
BaseMeteorSmall.prefabs.PreciousMetals = { "Any.Gameplay.MeteorImpMetalS_01", "Any.Gameplay.MeteorImpMetalS_03" }
BaseMeteorLarge.prefabs.PreciousMetals = { "Any.Gameplay.MeteorImpMetalB_01", "Any.Gameplay.MeteorImpMetalB_03" }
BaseMeteorSmall.prefabs.PreciousMinerals = { "Any.Gameplay.MeteorImpPolyS_01", "Any.Gameplay.MeteorImpPolyS_03" }
BaseMeteorLarge.prefabs.PreciousMinerals = { "Any.Gameplay.MeteorImpPolyB_01", "Any.Gameplay.MeteorImpPolyB_03" }

-- the game has some blank entities it uses, and they don't show up on impact.
-- I should add this to Fix Bugs...
local missing_entity_lookup = {
	SurfaceDepositMetals_03 = "SurfaceDeposit_Asteroid_Iron_01",
	SurfaceDepositMetals_04 = "SurfaceDeposit_Asteroid_Iron_02",
	SurfaceDepositMetals_05 = "Su


.com/4c69009c-0fd4-4153-b112-6cb53d1cf943"></p>',c="https://wpimg.wallstcn.com/e4558086-631c-425c-9430-56ffb46e70b3",s=0;s<o;s++)i.push(a.mock({id:"@increment",timestamp:+a.Random.date("T"),author:"@first",reviewer:"@first",title:"@title(5, 10)",content_short:"mock data",content:r,forecast:"@float(0, 100, 2, 2)",importance:"@integer(1, 3)","type|1":["CN","US","JP","EU"],"status|1":["published","draft"],display_time:"@datetime",comment_disabled:!0,pageviews:"@integer(300, 5000)",image_uri:c,platforms:["a-platform"]}));e.exports=[{url:"/vue-element-admin/article/list",type:"get",response:function(e){var t=e.query,n=t.importance,a=t.type,o=t.title,r=t.page,c=void 0===r?1:r,s=t.limit,l=void 0===s?20:s,d=t.sort,u=i.filter((function(e){return(!n||e.importance===+n)&&((!a||e.type===a)&&!(o&&e.title.indexOf(o)<0))}));"-id"===d&&(u=u.reverse());var m=u.filter((function(e,t){return t<l*c&&t>=l*(c-1)}));return{code:2e4,data:{total:u.length,items:m}}}},{url:"/vue-element-admin/article/detail",type:"get",response:function(e){for(var t=e.query.id,n=0,a=i;n<a.length;n++){var o=a[n];if(o.id===+t)return{code:2e4,data:o}}}},{url:"/vue-element-admin/article/pv",type:"get",response:function(e){return{code:2e4,data:{pvData:[{key:"PC",pv:1024},{key:"mobile",pv:1024},{key:"ios",pv:1024},{key:"android",pv:1024}]}}}},{url:"/vue-element-admin/article/create",type:"post",response:function(e){return{code:2e4,data:"success"}}},{url:"/vue-element-admin/article/update",type:"post",response:function(e){return{code:2e4,data:"success"}}}]},a14a:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),r=n.n(o),c=new i.a({id:"icon-404",use:"icon-404-usage",viewBox:"0 0 128 128",content:'<symbol xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" id="icon-404"><path d="M121.718 73.272v9.953c3.957-7.584 6.199-16.05 6.199-24.995C127.917 26.079 99.273 0 63.958 0 28.644 0 0 26.079 0 58.23c0 .403.028.806.028 1.21l22.97-25.953h13.34l-19.76 27.187h6.42V53.77l13.728-19.477v49.361H22.998V73.272H2.158c5.951 20.284 23.608 36.208 45.998 41.399-1.44 3.3-5.618 11.263-12.565 12.674-8.607 1.764 23.358.428 46.163-13.178 17.519-4.611 31


---Check if Ray Reconstrution is enabled
---@return boolean
function GameSettings.HasDLSSD()
    local dlssdSetting = Game.GetSettingsSystem():GetVar("/graphics/presets", "DLSS_D")

    return dlssdSetting and dlssdSetting:GetValue() or false
end


for (auto& state : mCaptureTabStates) {
		if(state->index == fromIndex) {
			state->index = toIndex;
		} else if(state->index == toIndex) {
			state->index = fromIndex;
		}
	}
}

void CaptureTabStateHandler::currentTabChanged(int index)
{
	mCurrentTabIndex = index;
}

void CaptureTabStateHandler::tabRemoved(int index)
{
	auto iterator = mCaptureTabStates.begin();
	while (iterator != mCaptureTabStates.end()) {
		if (iterator->data()->index == index) {
			iterator = mCaptureTabStates.erase(iterator);
		} else {
			if (iterator->data()->index > index) {
				iterator->data()->index--;
			}
			iterator++;
		}
	}
}

void CaptureTabStateHandler::currentTabContentChanged()
{
	auto currentTabState = getTabState(mCurrentTabIndex);
	if (!currentTabState.isNull()) {
		currentTabState->isSaved = false;
		refreshTabInfo(mCurrentTabIndex);
	}
}

void CaptureTabStateHandler::refreshTabInfo(int index)
{
	auto tabState = getTabState(index);
	if (!tabState.isNull()) {
		auto title = tabState->isSaved ? tabState->filename : tabState->filename + QLatin1String("*");
		emit updateTabInfo(tabState->index, title, tabState->path);
	}
}

int CaptureTabStateHandler::count() const
{
	return mCaptureTabStates.count();
}

int CaptureTabStateHandler::currentTabIndex() const
{
	return mCurrentTabIndex;
}

QSharedPointer<CaptureTabState> CaptureTabStateHandler::getTabState(int index)
{
	for (auto &state : mCaptureTabStates) {
		if (state->index == index) {
			return state;
		}
	}
	return QSharedPointer<CaptureTabState>(nullptr);
}
/*
 * Copyright (C) 2020 Damir Porobic <damir.porobic@gmx.com>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor,
 * Boston, MA 02110-1301, USA.
 */

#include "WidgetVisibilityHandler.h"

WidgetVisibilityHandler::WidgetVisibilityHandler(QWidget *widget) :
	mWidget(widget),
	mSelectedWindowState(Qt::WindowActive),
	mWindowStateChangeLock(false),
	mIsMinimized(false),
	mIsHidden(false)
{

}

void WidgetVisibilityHandler::hide()
{
	mWidget->hide();

	if(!mWindowStateChangeLock) {
		mIsHidden = true;
	}
}

void WidgetVisibilityHandler::makeInvisible()
{
	mWindowStateChangeLock = true;
	setVisible(false);
	mWidget->showMinimized();
}

void WidgetVisibilityHandler::show()
{
	showWidget();
}

void WidgetVisibilityHandler::minimize()
{
	mWindowStateChangeLock = true;
	mIsMinimized = true;
	mWidget->showMinimized();
}

void WidgetVisibilityHandler::restoreState()
{
	setVisible(true);

	if(!mIsMinimized && !mIsHidden) {
		showWidget();
		mIsHidden = false;
	} else if(!mIsMinimized && mIsHidden){
		hide();
	} else {
		mWidget->setWindowState(Qt::WindowMinimized);
		mIsHidden = false;
	}

	mW


urn;
		end;
		if p126 == "goggles" then
			if v59.gogglesactive == true then
				v59.gogglesactive = nil;
				return;
			else
				l__workspace__1.ServerStuff.handlePerkVisibility:FireServer("put_goggles");
				l__workspace__1.ServerStuff.playAudio:FireServer({ "perks" }, "goggles_on", character.HumanoidRootPart);
				if v59.gogglebroken then
					v59.gogglebroken = nil;
				end;
				v59.gogglesactive = true;
				local v1206 = l__game__7.ReplicatedStorage.effects.goggleslight:Clone();
				v1206.Parent = character.Head;
				local v1207 = Instance.new("Frame");
				v1207.BorderSizePixel = 0;
				v1207.BackgroundColor3 = Color3.new(0.8, 0, 0);
				v1207.Size = UDim2.new(1, 0, 1, 0);
				v1207.ZIndex = 1000;
				v1207.Parent = maingui;
				spawn(function()
					while true do
						v1207.BackgroundTransparency = v1207.BackgroundTransparency + 0.025;
						RS:wait();
						if v1207.BackgroundTransparency >= 1 then
							break;
						end;
					end;
					v1207:Destroy();
				end);
				if v59.gogglegui == nil then
					local v1208 = l__game__7.ReplicatedStorage.misc.goggles:Clone();
					v59.gogglegui = v1208;
				else
					v1208 = v59.gogglegui;
				end;
				v1208.Parent = ply.PlayerGui;
				spawn(function()
					local v1209 = l__game__7.ReplicatedStorage.effects.gogglesfx:Clone();
					for v1210, v1211 in ipairs(v1209:GetChildren()) do
						v1211.Parent = l__CurrentCamera__1;
					end;
					v1209:Destroy();
					if v60[3].cooldown <= tick() - u111 then
						local v1212 = tick() - v60[3].cooldown;
					else
						v1212 = u111;
					end;
					local u145 = v1212;
					function v59.goggletakedamage(p128)
						u145 = u145 + p128 * v60[3].damage_taken_multi;
						local v1213 = math.random(1, 6);
						if p128 >= 20 then
							v1213 = 1;
						elseif p128 >= 10 then
							v1213 = math.random(1, 3);
						end;
						if v1213 == 1 and v1208 then
							v101({ "perks" }, "goggles_glass", nil, nil, true, true);
							local v1214 = v1208.crackfx:Clone();
							v1214.Name = "cracked";
							v1214.Position = UDim2.new(math.random(0, 100) / 100, 0, math.random(0, 100) / 100, 0);
							v1214.Rotation = math.random(1, 360);
							v1214.Visible = true;
							v1214.Parent = v1208;
						end;
						if tick() - u111 <= 0 then
							v59.goggletakedamage = nil;
							if v1208 then
								v1208.destroyed.Visible = true;
								v1208.destroyedsub.Visible = true;
								v1208.destroyedtext.Visible = true;
							end;
						end;
					end;
					if v59.gogglebounties == nil then
						v59.gogglebounties = 0;
						function v59.gogglehandledamage(p129)
							if p129 == "del" or p129 == "removedam


     * 设置箭头颜色
     * @param color 颜色值
     */
    fun setArrowsColor(color: Int) {
        this.arrowsColor = color
    }

    /**设置箭头大小 1 最小  5最大
     *@param size 1-5
     */
    fun setArrowsSize(size: Int) {
        if (size in 1..5) {
            this.arrowsSize = size
        } else {
            throw RuntimeException("设置箭头大小 1 最小  5最大")
        }
    }

    /**
     * 清除上一步 箭头
     */
    fun clearLastArrows() {
        EditImageArrows.deleteArrows()
        postInvalidate()
    }

    /**
     * 水平镜像翻转
     */
    fun doHorizontalMirror() {
        mImage!!.toHorizontalMirror()
        onHoming()
    }

    /**
     * 垂直镜像翻转
     */
    fun doVerticalMirror() {
        mImage!!.toVerticalMirror()
        onHoming()
    }

    /**
     * 清除镜像反转
     */
    fun clearMirror() {
        if (!isHoming) {
            mImage!!.clearMirror()
            onHoming()
        }
    }

    /**
     * 设置马赛克宽度
     *  public static final  Float IMG_MOSAIC_SIZE_1=0.2F;
    public static final  Float IMG_MOSAIC_SIZE_2=0.3F;
    public static final  Float IMG_MOSAIC_SIZE_3=0.4F;
    public static final  Float IMG_MOSAIC_SIZE_4=0.5F;
    public static final  Float IMG_MOSAIC_SIZE_5=0.6F;
     */
    fun setMosaicWidth(float: Float) {
        EditImagePath.BASE_MOSAIC_WIDTH = float * 100
        mPen.width = float * 100
    }

    /**
     * 返回图像
     */
    fun getImage(): EditImage? = mImage

    /**
     * 重新设定裁剪
     */
    fun resetClip() {
        mImage!!.resetClip()
        mImage!!.clearMirror()
        onHoming()
    }

    /**
     * 开始剪裁
     */
    fun doClip() {
        mImage!!.clip(scrollX.toFloat(), scrollY.toFloat())
        mode = EditImageMode.NONE
        onHoming()
    }

    /**
     * 取消剪裁
     */
    fun cancelClip() {
        mImage!!.toBackupClip()
        mode = EditImageMode.NONE
    }

    /**
     * 这只画笔颜色
     * @param color 颜色值
     */
    fun setPenColor(color: Int) {
        mPen.color = color
    }

    /**
     * 涂鸦是否为空
     */
    val isDoodleEmpty: Boolean
        get() = mImage!!.isDoodleEmpty

    /**
     * 撤销上一步 涂鸦
     */
    fun undoDoodle() {
        mImage!!.undoDoodle()
        invalidate()
    }

    /**
     * 马赛克是否为空
     */
    val isMosaicEmpty: Boolean
        get() = mImage!!.isMosaicEmpty

    /**
     * 撤销上一步 马赛克
     */
    fun undoMosaic() {
        mImage!!.undoMosaic()
        invalidate()
    }

    /**
     * 加入自定义扩展 view 如，加入文字 自定义 view
     * @param stickerView 需要加入得View  一般继承于  IMGStickerView
     * @param params LayoutParams
     */
    fun <V> addStickerView(
        stickerView: V?,
        params: LayoutPar


: "RFC3339NoQuotes",
			in:   []byte(`2021-08-20T22:35:40Z`),
			out:  1629498940,
			ok:   true,
		},
		{
			name: "YYYY-MM-DDNoQuotes",
			in:   []byte(`2021-08-20`),
			out:  1629417600,
			ok:   true,
		},
		{
			name: "RFC3339OnlyOpeningQuote",
			in:   []byte(`"2021-08-20T22:35:40Z`),
			out:  1629498940,
			ok:   true,
		},
		{
			name: "YYYY-MM-DDOnlyOpeningQuote",
			in:   []byte(`"2021-08-20`),
			out:  1629417600,
			ok:   true,
		},
		{
			name: "RFC3339OnlyClosingQuote",
			in:   []byte(`2021-08-20T22:35:40Z"`),
			out:  1629498940,
			ok:   true,
		},
		{
			name: "YYYY-MM-DDOnlyClosingQuote",
			in:   []byte(`2021-08-20"`),
			out:  1629417600,
			ok:   true,
		},
		{
			name: "Invalid",
			in:   []byte("foobar"),
		},
		{
			name: "BrokenRFC3339",
			in:   []byte(`"2021-08-2022:35:40Z"`),
		},
		{
			name: "BrokenYYYY-MM-DD",
			in:   []byte(`"2021-13-20"`),
		},
	}
	for _, tc := range tests {
		t.Run(tc.name, func(t *testing.T) {
			ct := &ContextTime{}
			err := ct.UnmarshalJSON(tc.in)
			if tc.ok && err != nil {
				t.Errorf("ContextTime.UnmarshalJSON(%+v) got err %+v, want %+v", tc.in, err, tc.out)
				return
			}
			if !tc.ok && err == nil {
				t.Errorf("ContextTime.UnmarshalJSON(%+v) got %+v, want err", tc.in, ct)
				return
			}
			// ContextTime sets internal fields that we don't care about that makes cmp.Diff undesirable for comparison here.
			gotUnixTime := time.Time(*ct).Unix()
			if tc.ok && gotUnixTime != tc.out {
				t.Errorf("ContextTime.UnmarshalJSON(%+v) got time %d, want %d", tc.in, gotUnixTime, tc.out)
				return
			}
		})
	}
}
package nodes

import (
	"testing"

	"github.com/google/go-cmp/cmp"
)

func TestNewSurveyNode(t *testing.T) {
	tests := []struct {
		name     string
		inID     string
		inGroups []*SurveyGroup
		out      *SurveyNode
	}{
		{
			name: "Empty",
			out: &SurveyNode{
				node: node{typ: NodeSurvey},
			},
		},
		{
			// TODO: should the absence of an ID be an error?
			name: "GroupsNoID",
			inGroups: []*SurveyGroup{
				&SurveyGroup{
					Name:    "pick a number",
					Options: []string{"1", "2", "3"},
				},
				&SurveyGroup{
					Name:    "choose an answer",
					Options: []string{"yes", "no", "probably"},
				},
			},
			out: &SurveyNode{
				node: node{typ: NodeSurvey},
				Groups: []*SurveyGroup{
					&SurveyGroup{
						Name:    "pick a number",
						Options: []string{"1", "2", "3"},
					},
					&SurveyGroup{
						Name:    "choose an answer",
						Options: []string{"yes", "no",


supervisor mode (i.e., by the kernel); the CPU prevents user code from reading or writing them.

上述寄存器只能在管理员模式下访问（也就是说只能被内核访问），在用户模式下它们无法被读取或写入。

> Each CPU on a multi-core chip has its own set of these registers, and more than one CPU may be handling a trap at any given time.

对于此类寄存器，在多核芯片上的每个 CPU 核都有一组，也就是说在任意给定时刻，每个 CPU 可以独立地处理自己的 trap。

> When it forces a trap, the RISC-V hardware does the following for all trap types:
>
> 1. If the trap is a device interrupt, and the `sstatus` SIE bit is clear, don’t do any of the following.
> 2. Disable interrupts by clearing the SIE bit in `sstatus`.
> 3. Copy the `pc` to `sepc`.
> 4. Save the current mode (user or supervisor) in the SPP bit in `sstatus`.
> 5. Set `scause` to a number indicating the trap’s cause.
> 6. Set the mode to supervisor.
> 7. Copy `stvec` to the `pc`.
> 8. Start executing at the new `pc`.

硬件针对各种 trap 类型的处理都是相同的，当一个 trap 发生时，RISC-V 处理器会按顺序执行以下动作：

1. 如果 trap 是设备中断，并且 `sstatus` 的 SIE 位已清零，则不会执行以下任何操作（译者注：即关中断情况下设备中断即使发生也不会触发 trap）。
2. 清除 `sstatus` 中的 SIE 比特位来禁用中断。
3. 将 `pc` 的值复制到寄存器 `sepc` 中。
4. 将当前模式（用户模式或管理员模式）保存在 `sstatus` 的 SPP 比特位中。
5. 给寄存器 `scause` 设置一个特定的值以反映 trap 发生的原因。
6. 将模式设置为管理员模式。
7. 用寄存器 `stvec` 中的值覆盖 `pc`。
8. 根据 `pc` 中新的指令地址取指执行。

> The CPU doesn’t switch to the kernel page table, doesn’t switch to a stack in the kernel, and doesn’t save any registers other than the `pc`. Kernel software must perform these tasks. One reason that the CPU does minimal work during a trap is to provide flexibility to software; for example, some operating systems omit a page table switch in some situations to increase trap performance.

（当 trap 发生时）CPU 不会自动切换为使用内核页表，也不会自动切换为使用内核栈，同时也不会保存除 `pc` 之外的任何寄存器。内核的代码必须自己执行这些操作。CPU 在 trap 发生期间只执行少量工作的原因之一是为软件实现提供灵活性；例如，某些操作系统在某些情况下可能会省略页表切换以提高执行 trap 的性能。

> It’s worth thinking about whether any of the steps listed above could be omitted, perhaps in search of faster traps. Though there are situations in which a simpler sequence can work, many of the steps would be dangerous to omit in general. For example, suppose that the CPU didn’


ph.validPortDefinitions.OfType<IUnitInputPortDefinition>().SingleOrDefault(d => d.key == port.key);

            if (definition != null)
            {
                description.label = definition.Label();
                description.summary = definition.summary;

                if (definition.hideLabel)
                {
                    description.showLabel = false;
                }
            }
        }
    }
}


result
        }

    private fun checkError(type: String, path: String): Boolean {
        return if (!FileUtils.isExistsFile(path)) {
            true
        } else when (type) {
            TYPE_IMAGE -> return !MediaFile.isImageFile(path)
            TYPE_VIDEO -> return !MediaFile.isVideoFile(path)
            TYPE_AUDIO -> return !MediaFile.isAudioFile(path)
            else -> return true
        }
    }

    private fun getUri(cursor: Cursor): Uri {
        val id = cursor.getLong(cursor.getColumnIndex(MediaStore.Files.FileColumns._ID))
        val mimeType = cursor.getString(
            cursor.getColumnIndex(MediaStore.MediaColumns.MIME_TYPE)
        )

        val contentUri: Uri = when {
            MimeType.isImage(mimeType) -> MediaStore.Images.Media.EXTERNAL_CONTENT_URI
            MimeType.isVideo(mimeType) -> MediaStore.Video.Media.EXTERNAL_CONTENT_URI
            MimeType.isAudio(mimeType) -> MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
            else -> {
                MediaStore.Files.getContentUri("external")
            }
        }

        return ContentUris.withAppendedId(contentUri, id)
    }

    /**
     * 排序算法
     *
     * @param rs1
     * @param rs2
     * @return
     */
    private suspend fun doMediaBeanAlgorithm(
        rs1: java.util.ArrayList<MediaBean>?,
        rs2: java.util.ArrayList<MediaBean>?
    ) = withContext(Dispatchers.IO) {
        var i = 0
        var j = 0
        var k = 0
        val length1 = rs1?.size ?: 0
        val length2 = rs2?.size ?: 0
        val length = length1 + length2
        val result: ArrayList<MediaBean> = ArrayList(length)
        if (length1 == 0) {
            return@withContext rs2
        } else if (length2 == 0) {
            return@withContext rs1
        }
        while (k < length) {
            if (i == length1) { //rs1已经弄完
                result.add(rs2!![j])
                j++
            } else if (j == length2) { //rs2已经弄完
                result.add(rs1!![i])
                i++
            } else {
                if (rs1!![i].date > rs2!![j].date) { //rs1的放入
                    result.add(rs1[i])
                    i++
                } else { //rs2的放入
                    result.add(rs2[j])
                    j++
                }
            }
            k++
        }
        return@withContext result
    }

    private fun createVideoThumbnail(context: Context, mediaBean: MediaBean, kind: Int): Bitmap? {
        var bitmap: Bitmap? = null
        val retriever = MediaMetadataRetriever()
        try {
            retriever.setDataSource(context, mediaBean.uri)
            return retriever.getFrameAtTime(1000)
        } catch (ex: IllegalArgumentException) {
            ex.printStackTrace()
            // Assume this is a corrupt video file
        } catch (ex: RuntimeException) {
            ex.printStackTrace()
            // Assume this is a corrupt video file.
        } finally {
            try {
                retriever.release()
            } catch (ex: RuntimeException) {
                // Ignore failures while cleaning up.
            }
        }
        if (bitmap == null) return null
        if (kind == MediaStore.Images.Thumbnails.MINI_KIND) {
            // Scale down the bitmap if it's too large.
            val width = bitmap.width
            val height = bitmap.height
            val max = width.coerceAtLeast(height)
            if (max > 512) {
                val scale = 512f / max
                val w = (scale * width).roundToInt()
                val h


lumn-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{position:absolute;left:0;top:0;bottom:0;right:0;z-index:10;color:transparent;pointer-events:none}.xterm .xterm-accessibility-tree:not(.debug) ::selection{color:transparent}.xterm .xterm-accessibility-tree{user-select:text;white-space:pre}.xterm .live-region{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{text-decoration:double underline}.xterm-underline-3{text-decoration:wavy underline}.xterm-underline-4{text-decoration:dotted underline}.xterm-underline-5{text-decoration:dashed underline}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:overline underline}.xterm-overline.xterm-underline-2{text-decoration:overline double underline}.xterm-overline.xterm-underline-3{text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;position:absolute;top:0;right:0;pointer-events:none}.xterm-decoration-top{z-index:2;position:relative}
/* PrismJS 1.29.0
https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript+python&plugins=custom-class+toolbar+copy-to-clipboard+download-button */
code[class*=language-], pre[class*=language-] {
    color: #000;
    background: 0 0;
    text-shadow: 0 1px #fff;
    font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
    font-size: 1em;
    text-align: left;
    white-space: pre;
    word-spacing: normal;
    word-break: normal;
    word-wrap: normal;
    line-height: 1.5;
    -moz-tab-size: 4;
    -o-tab-size: 4;
    tab-size: 4;
    -webkit-hyphens: none;
    -moz-hyphens: none;
    -ms-hyphens: none;
    hyphens: none
}

code[class*=language-] ::-moz-selection, code[class*=language-]::-moz-selection, pre[class*=language-] ::-moz-selection, pre[class*=language-]::-moz-selection {
    text-shadow: none;
    background: #b3d4fc
}

code[class*=language-] ::selection, code[class*=language-]::selection, pre[class*=language-] ::selection, pre[class*=language-]::selection {
    text-shadow: none;
    background: #b3d4fc
}

@media print {
    code[class*=language-], pre[class*=language-] {
        text-shadow: none
    }
}

pre[class*=language-] {
    padding: 1em;
    margin: .5em 0;
    overflow: auto
}

:not(pre) > code[class*=language-


稱：

【測察世間聲而生，彼是共稱之意趣。】從世間禮俗行境而生之聲，法稱論師作為共稱之立名，由名言而生之法，詮說為共稱之聲。

未二•成立共稱遍及一切

【彼亦許一切所知，故共稱遍及一切。】境、時、相任一皆可，前時所立名或未立名亦可，共稱或不共稱皆可，容詮聲成立一切故，共稱亦成立於一切之故，為共通之旨趣。如云：「依彼所出生，欲轉故，無遮。已作未作等，種種性皆可。」

未三•彼之斷諍

【若謂不共許，共稱之聲與世俗相違。】信許存在唯「容詮聲」，然而前時不共許瓶等，而假立共稱之名與世俗相違？

【容詮述一切所知，作共稱之聲如煮。】雖是無實體然而實有效力故，造作立彼名，如：實有燒煮之效能謂烹煮之名。容許喝之物謂：「飲料」釋量論云：「雖無名於事，可性。由彼力，彼繫一切聲，故於彼彼成。」

午二•由聲生之共稱有三：

未一•認識由聲生之共稱

云：「由聲生之共稱」之旨義，亦

【容許共稱成立義，能依「立名」「隨詮聲」，若成立聲謂成立，敘說謂「聲生共稱」。】

未二：容許一切言聲成立一切義

能依「聲立名」和「隨欲詮立名」後，若成立聲亦即成立共稱，謂之敘述故，從聲而生謂共稱之說。如云：「聲依止於名，彼復唯依欲，聲成非不成，如是說聲名」。謂之述說。

未三•彼攝於比量：

【共稱比量之成立，相違無誤為非有。】當成立共稱性，是比量故，若相違比量之境，而不錯亂為非有，不需要唯一隨欲詮之數目者，前已述及，在此亦不須說。

辰二•第二說法亦有三：

巳一•由比量成立相異共稱境

非共通之故謂無比量之義，有兔非月之說法，詮說世俗表明無比量，除實勢比量外共稱之境相異之說，為何非同一共稱之境。


    {
      base::AutoLock auto_lock(hit_count_lock_);
      ++hit_count_;
    }

    return new TestURLRequestJob(
        request, network_delegate, it->second, worker_task_runner_);
  }

  const std::string scheme_;
  const std::string hostname_;

  const scoped_refptr<base::TaskRunner> network_task_runner_;
  const scoped_refptr<base::TaskRunner> worker_task_runner_;

  ResponseMap responses_;
  ResponseMap ignore_query_responses_;

  mutable base::Lock hit_count_lock_;
  mutable int hit_count_;

  DISALLOW_COPY_AND_ASSIGN(Delegate);
};

TestURLRequestInterceptor::TestURLRequestInterceptor(
    const std::string& scheme,
    const std::string& hostname,
    const scoped_refptr<base::TaskRunner>& network_task_runner,
    const scoped_refptr<base::TaskRunner>& worker_task_runner)
    : scheme_(scheme),
      hostname_(hostname),
      network_task_runner_(network_task_runner),
      delegate_(new Delegate(scheme,
                             hostname,
                             network_task_runner_,
                             worker_task_runner)) {
  network_task_runner_->PostTask(
      FROM_HERE, base::Bind(&Delegate::Register, base::Unretained(delegate_)));
}

TestURLRequestInterceptor::~TestURLRequestInterceptor() {
  network_task_runner_->PostTask(
      FROM_HERE, base::Bind(&Delegate::Unregister, scheme_, hostname_));
}

void TestURLRequestInterceptor::SetResponse(const GURL& url,
                                            const base::FilePath& path) {
  CHECK_EQ(scheme_, url.scheme());
  CHECK_EQ(hostname_, url.host());
  network_task_runner_->PostTask(FROM_HERE,
                                 base::Bind(&Delegate::SetResponse,
                                            base::Unretained(delegate_),
                                            url,
                                            path,
                                            false));
}

void TestURLRequestInterceptor::SetResponseIgnoreQuery(
    const GURL& url,
    const base::FilePath& path) {
  CHECK_EQ(scheme_, url.scheme());
  CHECK_EQ(hostname_, url.host());
  network_task_runner_->PostTask(FROM_HERE,
                                 base::Bind(&Delegate::SetResponse,
                                            base::Unretained(delegate_),
                                            url,
                                            path,
                                            true));
}

int TestURLRequestInterceptor::GetHitCount() {
  return delegate_->GetHitCount();
}

LocalHostTestURLRequestInterceptor::LocalHostTestURLRequestInterceptor(
    const scoped_refptr<base::TaskRunner>& network_task_runner,
    const scoped_refptr<base::TaskRunner>& worker_task_runner)
    : TestURLRequestInterceptor("http",
                                "localhost",
                                network_task_runner,
                                worker_task_runner) {
}

}  // namespace net
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "net/url_request/sdch_dictionary_fetcher.h"

#include <stdint.h>

#include "base/auto_reset.h"
#include "base/bind.h"
#include "base/compiler_specific.h"
#include "base/thread_task_runner_handle.h"
#include "net/base/load_flags.h"
#include "net/url_request/url_request_context.h"
#include "net/url_request/url_request_status.h"
#include "net/url_request/url_reque


tch = Stopwatch.createStarted()
                org.bitcoinj.core.Context.propagate(Constants.CONTEXT)

                trySend(
                    if (coinSelector != null) {
                        wallet.getBalance(coinSelector)
                    } else {
                        wallet.getBalance(balanceType)
                    }
                )
                log.info("process emit balance time: {} ms, selector {}", watch.elapsed(TimeUnit.MILLISECONDS), coinSelector?.javaClass?.simpleName)
            }
        }

        val walletChangeListener = object : ThrottlingWalletChangeListener() {
            override fun onThrottledWalletChanged() {
                // log.info("emitting balance: wallet changed {}", this@WalletBalanceObserver)
                emitBalance()
            }
        }

        wallet.addChangeEventListener(Threading.SAME_THREAD, walletChangeListener)
        wallet.addCoinsSentEventListener(Threading.SAME_THREAD, walletChangeListener)
        wallet.addCoinsReceivedEventListener(Threading.SAME_THREAD, walletChangeListener)

        emitBalance()

        awaitClose {
            wallet.removeChangeEventListener(walletChangeListener)
            wallet.removeCoinsSentEventListener(walletChangeListener)
            wallet.removeCoinsReceivedEventListener(walletChangeListener)
            walletChangeListener.removeCallbacks()
            emitterJob.cancel()
        }
    }

    /** the emitted balance depends on the current [CoinJoinMode] and if mixing is ongoing */
    fun observeSpendable(coinJoinService: CoinJoinService): Flow<Coin> = callbackFlow {
        val emitterJob = SupervisorJob()
        val emitterScope = CoroutineScope(Dispatchers.IO + emitterJob)

        fun emitSpendingBalance(isMixing: Boolean) {
            trySend(
                if (isMixing) {
                    _mixedBalance.value
                } else {
                    _totalBalance.value
                }
            )
        }

        fun emitBalance() {
            emitterScope.launch {
                emitSpendingBalance(coinJoinService.isMixing())
            }
        }

        coinJoinService.observeMixing()
            .onEach { isMixing ->
                emitSpendingBalance(isMixing)
            }
            .launchIn(emitterScope)

        emitBalance()

        awaitClose {
            emitterJob.cancel()
        }
    }
}/*
 * Copyright (c) 2022. Dash Core Group.
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package de.schildbach.wallet.service

import android.graphics.Bitmap
import android.graphics.BitmapFactory
import com.google.zxing.*
import de.schildbach.wallet.database.dao.AddressMetadataDao
import de.schildbach.wallet.database.dao.IconBitmapDao
import de.schildbach.wallet.database.dao.TransactionMetadataDao
import de.schildbach.wallet.database.dao.TransactionMetadataChangeCacheDao
import de.schildbach.wallet.database.dao.TransactionMetadataDocumentDao
import de.schildbach.wallet.database.entity.TransactionMetadataCacheItem
import kotlinx.coroutines.*
import kot


://www.youtube.com/watch?v=v26zjoNd-Cs)** (Decentralized autonomous corporation， 去中心化自治公司)？
> - 如果我们决定投资，那么我们应该用我们资金的多大比例去投资？

就这些了。最简单的问题需要最艰难的思考才能找到更准确更实在的答案。

## 10. 两个类比

看看镜子里罢，那里的每一样东西都和外面的一模一样，却可能是反过来的，不仅仅是各个物件都反过来了，连顺序都可能是反过来的。投资这事儿貌似就是发生在镜子里，在这个领域里，无论什么都看起来那么熟悉，那么简单，但，那些天真的投资者并不明白他们实际上在镜子里，他们不知道他们的所见所闻和他们过往在外面的完全不一样，机会看起来很危险，诱饵闻起来香喷喷。

另外一个好类比是驾驶。如果你是个中国人，到日本开车会很不习惯，因为他们开的是右舵车，你一会儿就迷糊了，因为你之前只习惯开左舵车。更糟糕的是，那可是开车啊，速度很快啊，一不小心就把自己弄死了…… 所以啊，开车时一定要**注意安全！**
# 要不要健脑？

两百多年前，人类经历了一场**工业革命**。在接下来的时间里直至今天，这场革命对人类的**体力**到底造成了什么样的影响呢？

突然之间，很多人不需要再像以前那样每天做在今天看起来绝对是超量的体力劳动了…… 结果呢？结果异常明显且又不可否认：绝大多数人的体力都变差了。几代人之后，绝大多数人若是有机会坐时光机穿梭回两百年前，干脆就是**非弱即残**，一定是那个时代里最令人看不起的所谓**手无缚鸡之力之辈**。

当然，这个事实长期很隐蔽，因为科技的发展，物资的丰富，医疗技术的进步，营养供给的充足，这一切都造就了另外一个结果，人们的平均寿命增加了，从十九世纪末差不多 30 岁不到，到了二十世纪初接近 80 岁…… 谁会觉得现代人的体力比古代人差很多有什么了不起的呢？

让我们看看光谱的两端，一方面是绝大多数人的**体力沉沦**…… 另外一方面呢？有另外一群人却与此同时通过**主动锻炼**获得了古代人绝对不可能拥有的体力。

作为现代人，我们中的绝大多数，能一口气做 10 个俯卧撑可能就属于至少前 20% 的人群了；古代人也


cense that complies with
//      Microsoft Public License (Ms-PL).
//   4. The names of the authors may not be used to endorse or promote products
//      derived from this software without specific prior written permission.
//
// The software is licensed "as-is." You bear the risk of using it. The authors
// give no express warranties, guarantees or conditions. You may have additional consumer
// rights under your local laws which this license cannot change. To the extent permitted
// under your local laws, the authors exclude the implied warranties of merchantability,
// fitness for a particular purpose and non-infringement.
// -----------------------------------------------------------------------------
#endregion

using System.Linq.Expressions;
using System.Xml.Linq;

namespace CamlexNET.Interfaces.ReverseEngeneering
{
    internal interface IReLinkerFactory
    {
        //IReLinker Create(XElement where, XElement orderBy, XElement groupBy, XElement viewFields);
        IReLinker Create(IReTranslator translator);
    }
}


aRoot": "` + tempDir + `"}`
	storageDefRepo := storage.NewInMemoryStorageDefRepo()
	storageDef, err := storageDefRepo.CreateStorageDefinition("fs", configJSON, "test", true, 0)
	if err != nil {
		t.FailNow()
	}
	storageInstance, err := storage.GetStorage(storageDef)
	if err != nil {
		t.FailNow()
	}
	dbConn := db.GetConnection(TestServiceMan.GetDBConfig())
	storedImageRepo := storage.NewDBStoredImageRepo(dbConn)
	imageRepo := image.NewDBImageRepo(dbConn)
	fakeImage := domainmodels.Image{
		UploaderIP:      "127.0.0.1",
		CreatedById:     "",
		MIMEType:        "image/png",
		Name:            "test.png",
		Identifier:      "test",
		NominalByteSize: int32(100),
		NominalWidth:    100,
		NominalHeight:   100,
	}
	storedImage, err := imageRepo.CreateAndSaveUploadedImage(&fakeImage, "image/png", []byte("test"), storageDef.Id, storageInstance.Save)
	if err != nil {
		t.Fatal(err)
	}
	imageId := storedImage.Image.Id
	if storedImage.IsFileDeleted {
		t.Fatal("IsFileDeleted is true")
	}
	storedImages, err := storedImageRepo.GetStoredImagesByIds([]string{storedImage.Id})
	if err != nil {
		t.Fatal(err)
	}
	storedImage = storedImages[0]
	image, _ := imageRepo.GetImageById(imageId)
	if image == nil {
		t.Fatal("image should not be nil")
	}
	err = imageRepo.DeleteImageById(imageId)
	if err != nil {
		t.Fatal(err)
	}
	image, _ = imageRepo.GetImageById(imageId)
	if image != nil {
		t.Fatal("image should be nil after deletion")
	}
	toDeleteList, err := storedImageRepo.GetStoredImagesToDelete()
	if err != nil {
		t.Fatal(err)
	}
	if len(toDeleteList) != 1 {
		t.Fatal("toDeleteList length is not 1")
	}
	count, err := storage.CleanupStoredImage(storedImageRepo, storageDefRepo)
	if err != nil {
		t.Fatal(err)
	}
	if count != 1 {
		t.Fatal("Deleted count is not 1")
	}
	storedImages, err = storedImageRepo.GetStoredImagesByIds([]string{storedImage.Id})
	if err != nil {
		t.Fatal(err)
	}
	storedImage = storedImages[0]
	meta := storageInstance.GetMeta(storedImage.FileIdentifier)
	if meta.ByteSize != 0 {
		t.Fatal("File is not deleted")
	}
	if !storedImage.IsFileDeleted {
		t.Fatal("IsFileDeleted is not set to true")
	}
}
package storage_test

import (
	"bytes"
	"testing"

	"github.com/ericls/imgdd/storage"
)

func TestWebDAVStorage(t *testing.T) {
	TestServiceMan.StartWebDav()
	data := []byte("test data")
	config := TestServiceMan.GetWebDavConfig()
	backend := storage.GetBackend("webdav").(*storage.WebDAVBackend)
	if backend == nil {
		t.Fatal("webdav backend not found")
	}
	storeWithPrefix, err := backend.FromJSONConfig([]byte(`{"url":"` + "http://localhost:" + config.Port + `","username":"` + config.Username + `","password":"` + config.Password + `",


::Module;

pub struct Add
{
    op1: Box<Module>,
    op2: Box<Module>,
}

impl Add
{
    pub fn new<M: Module + 'static, N: Module + 'static>(op1: M, op2: N) -> Add
    {
        Add
        {
            op1: Box::new(op1),
            op2: Box::new(op2),
        }
    }
}

impl Module for Add
{
    fn generate(&mut self, step: f32) -> Option<f32>
    {
        Some(self.op1.generate(step).unwrap() + self.op2.generate(step).unwrap())
    }
}
use std::{
    collections::HashMap,
    error::Error,
    io::{self, BufRead, BufReader},
    sync::Arc,
};

use regex::Regex;

use crate::{
    math::{Matrix, Tuple},
    space::{Group, Shape, Triangle},
};

use ParsedElement::*;

lazy_static::lazy_static! {
    // Faces with texture vertices (`f a/b/c...`) are decoded as faces with normals only, as texture
    // vertices are not supported.
    // The "Faces with texture" regex could be merged into the bare "Faces" one, but it gets too messy.

    static ref VERTEX_REGEX: Regex = Regex::new(r"^v (-?\d+(?:\.\d+)?) (-?\d+(?:\.\d+)?) (-?\d+(?:\.\d+)?)$").unwrap();
    static ref VERTEX_NORMAL_REGEX: Regex = Regex::new(r"^vn (-?\d+(?:\.\d+)?) (-?\d+(?:\.\d+)?) (-?\d+(?:\.\d+)?)$").unwrap();
    static ref FACES_REGEX: Regex = Regex::new(r"^f (\d+) (\d+(?: \d+)+)$").unwrap();
    static ref FACES_WITH_TEXTURE_REGEX: Regex = Regex::new(r"^f (\d+)/\d*/ (\d+)/\d*/ (\d+)/\d*/$").unwrap();
    static ref FACE_WITH_NORMAL_REGEX: Regex = Regex::new(r"^f (\d+)/\d*/(\d+) (\d+)/\d*/(\d+) (\d+)/\d*/(\d+)$").unwrap();
    static ref GROUP_REGEX: Regex = Regex::new(r"^g (\w+)$").unwrap();
}

// The book doesn't actually clarify what happens to the default group once group definitions parsing
// is introduced.
//
const DEFAULT_GROUP_NAME: &str = "default";

#[derive(Debug)]
enum ParsedElement {
    Vertex(Tuple),
    VertexNormal(Tuple),
    Faces(Vec<(usize, usize, usize)>),
    Face(usize, usize, usize),
    FaceWithNormal((usize, usize), (usize, usize), (usize, usize)),
    Group(String),
    Invalid,
}

pub struct ObjParser {
    // WATCH OUT!!! DON'T ACCESS VERTICES/NORMALS DIRECTLY, WHILE PARSING!!!
    // The indexes are 1-based, which are extremely easy to mistake.
    //
    vertices: Vec<Tuple>,
    normals: Vec<Tuple>,
    // The values are only Face/FaceWithNormal.
    //
    groups_data: HashMap<String, Vec<ParsedElement>>,
}

impl ObjParser {
    pub fn parse<T: io::Read>(reader: T) -> Result<Self, Box<dyn Error>> {
        let reader = BufReader::new(reader);

        // Ownership is a bit tricky. It's not possible to use borrowed keys, because are inside the
        // for loop (match) scope, they don't survive this (the outer) scope.
        //
        let mut groups = HashMap::new();

        groups.insert(DEFAULT_GROUP_NAME.to_string(), vec![]);

        let mut parser = Self {
            vertices: vec![],
            normals: vec![],
            groups_data: groups,
        };


) {
        BigDecimal value = switchDecimal(object);
        if (value != null) {
            return Math.abs(value.doubleValue());
        }
        return object;
    }

    /**
     * 向上取整
     * <p>
     * 将给定的对象转换为BigDecimal，然后进行向上取整操作，确保结果为最接近的整数值
     * 如果对象不能转换为BigDecimal，则直接返回原对象
     *
     * @param object 需要进行向上取整处理的对象，预期为数值类型
     * @return 向上取整后的对象，或原对象（如果无法转换）
     */
    public static Object getCeiling(Object object) {
        BigDecimal value = switchDecimal(object);
        if (value != null) {
            return value.setScale(0, RoundingMode.CEILING).longValue();
        }
        return object;
    }

    /**
     * 向下取整方法，用于将传入的对象转换为最接近且小于等于该对象值的整数
     * 主要处理BigDecimal类型的数据，但也可以处理其他可转换为BigDecimal的对象
     *
     * @param object 待处理的对象，可以是BigDecimal类型或其他可转换为BigDecimal的类型
     * @return 处理后的对象，向下取整后的整数或原对象（如果无法处理）
     */
    public static Object getFloor(Object object) {
        BigDecimal value = switchDecimal(object);
        if (value != null) {
            return value.setScale(0, RoundingMode.FLOOR).longValue();
        }
        return object;
    }

    /**
     * 计算e的x次方
     * 该方法接受一个Object类型的参数，尝试将其转换为BigDecimal，
     * 然后计算e的该BigDecimal值次方的结果如果转换失败，
     * 则直接返回原始输入
     *
     * @param object 任何可以转换为BigDecimal的对象，通常代表一个数值
     * @return 计算后的结果，如果转换失败则返回原始输入
     */
    public static Object getExp(Object object) {
        BigDecimal value = switchDecimal(object);
        if (value != null) {
            return Math.pow(Math.E, value.doubleValue());
        }
        return object;
    }

    /**
     * 计算一个数的指定次幂
     *
     * @param base  基数，以字符串形式输入
     * @param value 指数，以字符串形式输入
     * @return 返回计算结果，即基数的指数次幂
     */
    public static double power(String base, String value) {
        double d1 = switchDecimal(base).doubleValue();
        double d2 = switchDecimal(value).doubleValue();
        return Math.pow(d1, d2);

    }

    /**
     * 计算给定值的对数
     * 如果提供了基数，则计算指定基数的对数；否则计算自然对数
     *
     * @param value 数值对象，用于计算对数
     * @param base