用户熄屏空闲时Wifi不会断开。
                        }

                    }
                }
            }
        } else if (mCellularLock == null && isMobileNetwork(context)) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                context.getSystemService(PowerManager::class.java)?.let {
                    mCellularLock = it.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "WifiLockHelper Lock_Cellular")
                    mCellularLock?.acquire(10 * 60 * 1000L /*10 minutes*/)
                }
            }
        }
    }

    /**
     * 判断wifi是否连接状态
     *
     * 需添加权限 android.permission.ACCESS_NETWORK_STATE
     *
     * @param context 上下文
     * @return true: 连接并可用

false: 未连接或者不可用
     */
    private fun isWifiConnected(context: Context): Boolean {
        val cm = context
            .getSystemService(Context.CONNECTIVITY_SERVICE) as? ConnectivityManager
        return cm?.activeNetworkInfo?.type == ConnectivityManager.TYPE_WIFI
                && cm.activeNetworkInfo?.isAvailable == true
    }

    private fun isMobileNetwork(context: Context): Boolean {
        (context.getSystemService(Context.CONNECTIVITY_SERVICE) as? ConnectivityManager)?.activeNetworkInfo?.let {
            val netType = it.type
            /*
            ConnectivityManager.TYPE_WIMAX :即全球微波互联接入。是一项新兴的宽带无线接入技术，能提供面向互联网的高速连接，
            数据传输距离最远可达50km。WiMAX还具有QoS保障、传输速率高、业务丰富多样等优点。WiMAX的技术起点较高，
            采用了代表未来通信技术发展方向的OFDM/OFDMA、AAS、MIMO等先进技术，随着技术标准的发展，WiMAX逐步实现宽带业务的移动化，
            而3G则实现移动业务的宽带化，两种网络的融合程度会越来越高。
             */
            if ((netType == ConnectivityManager.TYPE_MOBILE || netType == ConnectivityManager.TYPE_WIMAX)) {
                val netSubType = it.subtype
                // 下面的判断写得像放屁一样，总结就是netSubType >= 1的都认为是移动网络，这就包含了所有的子网络类型了。所以这里可以直接返回true的，不需要判断子网络类型
                return ((netSubType >= TelephonyManager.NETWORK_TYPE_UMTS)        // 值是3
                        || // HACK
                        (netSubType == TelephonyManager.NETWORK_TYPE_GPRS)        // 值是1
                        || (netSubType == TelephonyManager.NETWORK_TYPE_EDGE)) // 值是2
            } else {
                return false
            }

        } ?: return false
    }

    /**
     * Unlocks the network and stop using it. The network must be locked first using @ref acquire.
     * @return true is succeed, false otherwise.
     */
    fun release() {
        if (mWifiLock?.isHeld == true) {
            mWifiLock?.release()
        }
        mWifiLock = null
        if (mCellularLock?.isHeld == true) {
            mCellularLock?.release()
        }
        mCellularLock = null
    }
}package com.lzx.starrysky.playback

import android.content.Context
import android.media.AudioAttributes
import android.media.AudioManager
import android.media.SoundPool
import android.os.AsyncTask
import android.os.Build
import com.lzx.starrysky.utils.MainLooper


a block-step-size-induced adjustment
			is inserted on the start side of the box.

In all cases,
	additional spacing cannot be added to margins
	that are truncated or omitted due to unforced fragmentation breaks
	(see [CSS3-PAGE] and [CSS-BREAK-3]);
	therefore if block-step-insert is margin,
	all extra space derived from applying block-step-size
	must be inserted on the opposite side of the fragment
	(regardless of block-step-align).

2.4. Rounding Method: the block-step-round property

      Name:
      <dfn class="css dfn-paneled" data-dfn-type="property" data-export id="propdef-block-step-round">block-step-round</dfn>

      Value:
      up | down | nearest

      Initial:
      up

      Applies to:
      block-level boxes

      Inherited:
      no

      Percentages:
      N/A

      <t


/* This testcase is part of GDB, the GNU debugger.

   Copyright 2025 Free Software Foundation, Inc.

   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/>.  */

/* This file is compiled from gdb.arch/amd64-extended-prologue-analysis.c
   using gcc 11.4.0 with flags: -g0 -O1 -S -fomit-frame-pointer
   -fno-asynchronous-unwind-tables.  */

	.file	"amd64-extended-prologue-analysis.c"
	.text
	.globl	bar
	.type	bar, @function
bar:
	endbr64
	leal	(%rdi,%rdi), %eax
	ret
	.size	bar, .-bar
	.globl	foo
	.type	foo, @function
foo:
	endbr64
	pushq	%r14
	pushq	%r13
	pushq	%r1


 per document are used for client connection, Kit process communication, and
    // a wakeup pipe with 2 fds. 32 fds (i.e. 8 documents) are reserved.
    LOG_INF("Maximum number of open documents supported by the system: " << rlim.rlim_cur / 4 - 8);

    LOG_INF("Maximum concurrent open Documents limit: " << LOOLWSD::MaxDocuments);
    LOG_INF("Maximum concurrent client Connections limit: " << LOOLWSD::MaxConnections);

    LOOLWSD::NumConnections = 0;

    // Command Tracing.
    if (getConfigValue<bool>(conf, "trace[@enable]", false))
    {
        const auto& path = getConfigValue<std::string>(conf, "trace.path", "");
        const auto recordOutgoing = getConfigValue<bool>(conf, "trace.outgoing.record", false);
        std::vector<std::string> filters;
        for (size_t i = 0; ; ++i)
        {
            const std::string confPath = "trace.filter.message[" + std::to_string(i) + ']';
            const std::string regex = config().getString(confPath, "");
            if (!regex.empty())
            {
                filters.push_back(regex);
            }
            else if (!config().has(confPath))
            {
                break;
            }
        }

        const auto compress = getConfigValue<bool>(conf, "trace.path[@compress]", false);
        const auto takeSnapshot = getConfigValue<bool>(conf, "trace.path[@snapshot]", false);
        TraceDumper.reset(new TraceFileWriter(path, recordOutgoing, compress, takeSnapshot, filters));
    }

#if !MOBILEAPP
    SavedClipboards.reset(new ClipboardCache());

    FileServerRequestHandler::initialize();
#endif

    StorageBase::initialize();

#if !MOBILEAPP
    ServerApplication::initialize(self);

    DocProcSettings docProcSettings;
    docProcSettings.setLimitVirtMemMb(getConfigValue<int>("per_document.limit_virt_mem_mb", 0));
    docProcSettings.setLimitStackMemKb(getConfigValue<int>("per_document.limit_stack_mem_kb", 0));
    docProcSettings.setLimitFileSizeMb(getConfigValue<int>("per_document.limit_file_size_mb", 0));
    docProcSettings.setLimitNumberOpenFiles(getConfigValue<int>("per_document.limit_num_open_files", 0));

    DocCleanupSettings &docCleanupSettings = docProcSettings.getCleanupSettings();
    docCleanupSettings.setEnable(getConfigValue<bool>("per_document.cleanup[@enable]", false));
    docCleanupSettings.setCleanupInterval(getConfigValue<int>("per_document.cleanup.cleanup_interval_ms", 10000));
    docCleanupSettings.setBadBehaviorPeriod(getConfigValue<int>("per_document.cleanup.bad_behavior_period_secs", 60));
    docCleanupSettings.setIdleTime(getConfigValue<int>("per_document.cleanup.idle_time_secs", 300));
    docCleanupSettings.setLimitDirtyMem(getConfigValue<int>("per_document.cleanup.limit_dirty_mem_mb", 3072));
    docCleanupSettings.setLimitCpu(getConfigValue<int>("per_document.cleanup.limit_cpu_per", 85));

    Admin::instance().setDefDocProcSettings(docProcSettings, false);

#if ENABLE_DEBUG
    std::string postMessageURI =
        getServiceURI("/loleaflet/dist/framed.doc.html?file_path="
                      DEBUG_ABSSRCDIR "/" LOOLWSD_TEST_DOCUMENT_RELATIVE_PATH_CALC);
    std::cerr << "\nLaunch one of these in your browser:\n\n"
              << "


hCommonClock_Config(void)
{
  RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};

  /** Initializes the peripherals clock
  */
  PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SMPS;
  PeriphClkInitStruct.SmpsClockSelection = RCC_SMPSCLKSOURCE_HSI;
  PeriphClkInitStruct.SmpsDivSelection = RCC_SMPSCLKDIV_RANGE1;

  if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN Smps */

  /* USER CODE END Smps */
}

/* USER CODE BEGIN 4 */

/* USER CODE END 4 */

/**
  * @brief  This function is executed in case of error occurrence.
  * @retval None
  */
void Error_Handler(void)
{
  /* USER CODE BEGIN Error_Handler_Debug */
  /* User can add his own implementation to report the HAL error return state */

  /* USER CODE END Error_Handler_Debug */
}

#ifdef  USE_FULL_ASSERT
/**
  * @brief  Reports the name of the source file and the source line number
  *         where the assert_param error has occurred.
  * @param  file: pointer to the source file name
  * @param  line: assert_param error line source number
  * @retval None
  */
void assert_failed(uint8_t *file, uint32_t line)
{
  /* USER CODE BEGIN 6 */
  /* User can add his own implementation to report the file name and line number,
     tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  /* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */


	return tc
			}
			tc.res.Body = io.NopCloser(bytes.NewReader(body))
		}
		doc, err := html.Parse(bytes.NewReader(body))
		if !testarossa.NoError(tc.t, err, "Failed to parse HTML") {
			return tc
		}
		matches := selector.MatchAll(doc)
		if len(matches) == 0 {
			return tc
		}
		if !testarossa.NotEqual(tc.t, "", value, "Found tag matching %s", cssSelectorQuery) {
			return tc
		}
		found := false
		for _, match := range matches {
			if textMatches(match) {
				found = true
				break
			}
		}
		testarossa.False(tc.t, found, "Found tag matching %s that contains %s", cssSelectorQuery, value)
	}
	return tc
}

/*
TagNotContains asserts no error and that there is no tag matching the CSS selector that
either contains the text itself or has a descendant that does.

Example:

	TagNotContains("TR > TD > A[href]", "Harry Potter")
	TagNotContains("DIV#main_panel > SELECT > OPTION", "Red")
*/
func (tc *ManagerOnlyTestCase) TagNotContains(cssSelectorQuery string, value string) *ManagerOnlyTestCase {
	var textMatches func(n *html.Node) bool
	textMatches = func(n *html.Node) bool {
		for x := n.FirstChild; x != nil; x = x.NextSibling {
			if strings.Contains(x.Data, value) || textMatches(x) {
				return true
			}
		}
		return false
	}

	if testarossa.NoError(tc.t, tc.err) {
		selector, err := cascadia.Compile(cssSelectorQuery)
		if !testarossa.NoError(tc.t, err, "Invalid selector %s", cssSelectorQuery) {
			return tc
		}
		var body []byte
		if br, ok := tc.res.Body.(*httpx.BodyReader); ok {
			body = br.Bytes()
		} else {
			var err error
			body, err = io.ReadAll(tc.res.Body)
			if !testarossa.NoError(tc.t, err, "Failed to read body") {
				return tc
			}
			tc.res.Body = io.NopCloser(bytes.NewReader(body))
		}
		doc, err := html.Parse(bytes.NewReader(body))
		if !testarossa.NoError(tc.t, err, "Failed to parse HTML") {
			return tc
		}
		matches := selector.MatchAll(doc)
		if len(matches) == 0 {
			return tc
		}
		if !testarossa.NotEqual(tc.t, "", value, "Found tag matching %s", cssSelectorQuery) {
			return tc
		}
		found := false
		for _, match := range matches {
			if textMatches(match) {
				found = true
				break
			}
		}
		testarossa.False(tc.t, found, "Found tag matching %s that contains %s", cssSelectorQuery, value)
	}
	return tc
}

// Error asserts an error.
func (tc *ManagerOnlyTestCase) Error(errContains string) *ManagerOnlyTestCase {
	if testarossa.Error(tc.t, tc.err) {
		testarossa.Contains(tc.t, tc.err.Error(), errContains)
	}
	return tc
}

// ErrorCode asserts an error by its status code.
func (tc *ManagerOnlyTestCase) ErrorCode(statusCode int) *ManagerOnlyTestCase {
	if testarossa.Error(tc.t, tc.err) {
		testarossa.Equal(tc.t, statusCode, errors.Convert(tc.err).StatusCode)
	}
	return tc
}

// NoError asserts no error.
func (tc *ManagerOnlyTestCase) NoError() *ManagerOnlyTestCase {
	testarossa.NoError(tc.t, tc.err)
	return tc
}

//


 type: "*",
        doc: "Other keys to configure the data source."
    }
};
var source_geojson = {
    type: {
        required: true,
        type: "enum",
        values: {
            geojson: {
                doc: "A GeoJSON data source."
            }
        },
        doc: "The data type of the GeoJSON source."
    },
    data: {
        type: "*",
        doc: "A URL to a GeoJSON file, or inline GeoJSON."
    },
    maxzoom: {
        type: "number",
        "default": 18,
        doc: "Maximum zoom level at which to create vector tiles (higher means greater detail at high zoom levels)."
    },
    attribution: {
        type: "string",
        doc: "Contains an attribution to be displayed when the map is shown to a user."
    },
    buffer: {
        type: "number",
        "default": 128,
        maximum: 512,
        minimum: 0,
        doc: "Size of the tile buffer on each side. A value of 0 produces no buffer. A value of 512 produces a buffer as wide as the tile itself. Larger values produce fewer rendering artifacts near tile edges and slower performance."
    },
    filter: {
        type: "*",
        doc: "An expression for filtering features prior to processing them for rendering."
    },
    tolerance: {
        type: "number",
        "default": 0.375,
        doc: "Douglas-Peucker simplification tolerance (higher means simpler geometries and faster performance)."
    },
    cluster: {
        type: "boolean",
        "default": false,
        doc: "If the data is a collection of point features, setting this to true clusters the points by radius into groups. Cluster groups become new `Point` features in the source with additional properties:\n * `cluster` Is `true` if the point is a cluster \n * `cluster_id` A unqiue id for the cluster to be used in conjunction with the [cluster inspection methods](https://www.mapbox.com/mapbox-gl-js/api/#geojsonsource#getclusterexpansionzoom)\n * `point_count` Number of original points grouped into this cluster\n * `point_count_abbreviated` An abbreviated point count"
    },
    clusterRadius: {
        type: "number",
        "default": 50,
        minimum: 0,
        doc: "Radius of each cluster if clustering is enabled. A value of 512 indicates a radius equal to the width of a tile."
    },
    clusterMaxZoom: {
        type: "number",
        doc: "Max zoom on which to cluster points if clustering is enabled. Defaults to one zoom less than maxzoom (so that last zoom features are not clustered). Clusters are re-evaluated at integer zoom levels so setting clusterMaxZoom to 14 means the clusters will be displayed until z15."
    },
    clusterMinPoints: {
        type: "number",
        doc: "Minimum number of points necessary to form a cluster if clustering is enabled. Defaults to `2`."
    },
    clusterProperties: {
        type: "*",
        doc: "An object defining custom properties on the generated clusters if clustering is enabled, aggregating values from clustered points. Has the form `{\"property_name\": [operator, map_expression]}`. `operator` is any expression function that accepts at least 2 operands (e.g. `\"+\"` or `\"max\"`) — it accumulates the property value from clusters/points the cluster contains; `map_expression` produces the value of a single point.\n\nExample: `{\"sum\": [\"+\", [\"get\", \"scalerank\"]]}`.\n\nFor more advanced use cases, in place of `operator`, you can use a custom reduce expression that references a special `[\"accumulated\"]` value, e.g.:\n`{\"sum\": [[\"+\", [\"accumulated\"], [\"get\", \"sum\"]], [\"get\", \"scalerank\"]]}`"
    },
    lineMetrics: {
        type: "boolean",
        "default": false,
        doc


 p, why.kind()))?;
            }
        }

        if !self.path.exists() {
            let mut f = File::create(&self.path)
                .map_err(|why| format!("Error creating {:?}: {:?}", self.path, why.kind()))?;
            f.write_all(DEFAULT_JSON_CONTENT.as_bytes())
                .map_err(|why| format!("Error writing {:?}: {:?}", self.path, why.kind()))?;
        }

        Ok(())
    }
}
use std::slice::from_raw_parts;

use bls_signatures::{
    aggregate as aggregate_sig,
    groupy::{CurveAffine, CurveProjective, EncodedPoint, GroupDecodingError},
    hash as hash_sig,
    paired::bls12_381::{G2Affine, G2Compressed},
    verify as verify_sig, PrivateKey, PublicKey, Serialize, Signature,
};
use libc;
use rand::rngs::OsRng;
use rand::SeedableRng;
use rand_chacha::ChaChaRng;

use rayon::prelude::*;

use crate::bls::types;

pub const SIGNATURE_BYTES: usize = 96;
pub const PRIVATE_KEY_BYTES: usize = 32;
pub const PUBLIC_KEY_BYTES: usize = 48;
pub const DIGEST_BYTES: usize = 96;

pub type BLSSignature = [u8; SIGNATURE_BYTES];
pub type BLSPrivateKey = [u8; PRIVATE_KEY_BYTES];
pub type BLSPublicKey = [u8; PUBLIC_KEY_BYTES];
pub type BLSDigest = [u8; DIGEST_BYTES];

/// Unwraps or returns the passed in value.
macro_rules! try_ffi {
    ($res:expr, $val:expr) => {{
        match $res {
            Ok(res) => res,
            Err(_) => return $val,
        }
    }};
}

/// Compute the digest of a message
///
/// # Arguments
///
/// * `message_ptr` - pointer to a message byte array
/// * `message_len` - length of the byte array
#[no_mangle]
pub unsafe extern "C" fn hash(
    message_ptr: *const u8,
    message_len: libc::size_t,
) -> *mut types::HashResponse {
    // prep request
    let message = from_raw_parts(message_ptr, message_len);

    // call method
    let digest = hash_sig(message);

    // prep response
    let mut raw_digest: [u8; DIGEST_BYTES] = [0; DIGEST_BYTES];
    raw_digest.copy_from_slice(digest.into_affine().into_compressed().as_ref());

    let response = types::HashResponse { digest: raw_digest };

    Box::into_raw(Box::new(response))
}

/// Aggregate signatures together into a new signature
///
/// # Arguments
///
/// * `flattened_signatures_ptr` - pointer to a byte array containing signatures
/// * `flattened_signatures_len` - length of the byte array (multiple of SIGNATURE_BYTES)
///
/// Returns `NULL` on error. Result must be freed using `destroy_aggregate_response`.
#[no_mangle]
pub unsafe extern "C" fn aggregate(
    flattened_signatures_ptr: *const u8,
    flattened_signatures_len: libc::size_t,
) -> *mut types::AggregateResponse {
    // prep request
    let signatures = try_ffi!(
        from_raw_parts(flattened_signatures_ptr, flattened_signatures_len)
            .par_chunks(SIGNATURE_BYTES)
            .map(|item| { Signature::from_bytes(item) })
            .collect::<Result<Vec<_>, _>>(),
        std::ptr::null_mut()
    );

    let mut raw_signature: [u8; SIGNATURE_BYTES] = [0; SIGNATURE_BYTES];


#include "util.h"

#include <ctype.h>
#include <string.h>

char* trim(char *str)
{
    char *left = str;
    char *right = str + (strlen(str) - 1);

    while (isspace(*left)) {
        left++;
    }
    while (isspace(*right)) {
        right--;
    }

    if (left == str) {
        *++right = '\0';
    }
    else {
        char *p = str;
        while (left <= right) {
            *p++ = *left++;
        }
        *p = '\0';
    }

    return str;
}

char* split(char *str, char delimiter)
{
    char *p = strchr(str, delimiter);
    if (p != NULL) {
        *p = '\0';
        return p + 1;
    }
    return NULL;
}

// this function will return a new alloced string
// with all escape chars prefixed with '\\'
char* escape(const char *str, char escape) {
    const char escape_prefix = '\\';
    const int len = strlen(str);
    char *escaped_str = (char *) malloc(sizeof(char) * len * 2);
    int i = 0, j = 0;
    // use i <= len so that the last '\0' is also copied
    for (; i <= len; i++) {
        if (str[i] == escape) {
            escaped_str[j++] = escape_prefix;
        }
        escaped_str[j++] = str[i];
    }
    return escaped_str;
}


: 125px;
}
#js-sf-status {
  text-align: center;
  font-size: 24px;
}
.js-sf-err {
  color: #C41E3A;
}
.boardBlock {
  font-weight: bold;
}

.blink {
  -webkit-animation: blink 1.5s step-end infinite;
  -moz-animation: blink 1.5s step-end infinite;
  -o-animation: blink 1.5s step-end infinite;
  animation: blink 1.5s step-end infinite;
}

@-webkit-keyframes blink { 50% { opacity: 0 } }
@-moz-keyframes blink { 50% { opacity: 0 } }
@-o-keyframes blink { 50% { opacity: 0 } }
@keyframes blink { 50% { opacity: 0 } }

.ogv-cnt {
  position: relative;
  display: inline-block;
  text-align: center;
  min-height: 16px;
}

.ogv-cnt:not(.ogv-detached)::before {
  content: 'Loading…';
  position: absolute;
  top: 8px;
  left: 0;
  font-weight: bold;
}

.ogv-cnt.ogv-loaded::before {
  display: none;
}

.ogv-cnt > ogvjs {
  position: initial !important;
}

.ogv-ctrl {
  position: absolute;
  bottom: 0;
  z-index: 2;
  background: rgba(0, 0, 0, 0.65);
  width: 100%;
  height: 32px;
  gap: 0;
  display: none;
}

.ogv-btn {
  width: 32px;
  height: 32px;
  line-height: 32px;
  text-align: center;
  color: white;
}

.ogv-btn svg {
  vertical-align: middle;
}

.ogv-btn svg:last-child   {
  display: none;
}

.ogv-btn.ogv-toggled svg:first-child   {
  display: none;
}

.ogv-btn.ogv-toggled svg:last-child   {
  display: inline;
}

.ogv-ts {
  font-family: sans-serif;
  font-size: 10px;
  text-align: center;
  line-height: 32px;
  width: 70px;
  color: white;
  overflow: hidden;
}

.ogv-vol {
  width: 50px;
  margin: 0;
}

.ogv-seek {
  width: 0;
  margin: 0;
  flex-grow: 1;
}
@import "src/assets/_vars";

.features {
  margin-top: 40px;
  margin-bottom: 40px;

  @media screen and (width >= $sm) {
    margin-top: 64px;
    margin-bottom: 64px;
  }

  @media screen and (width >= $lg) {
    margin-top: 128px;
    margin-bottom: 128px;
  }
}

.features-grid {
  display: grid;
  gap: 32px;

  @media screen and (width >= $sm) {
    grid-template-columns: repeat(4, 1fr);
  }

  @media screen and (width >= $xl) {
    grid-template-columns: repeat(6, 1fr);
  }
}

.features-card {
  position: relative;
  grid-column: span 2 / span 2;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  background-color: var(--cl-neutral-50);
  border-radius: 12px;
  padding: 32px;
  height: 192px;
  overflow: hidden;

  &::before {
    content: "";
    position: absolute;
    transform


t) {
            WSDL_tester.PUB01A.processRequest inValue = new WSDL_tester.PUB01A.processRequest();
            inValue.Request = Request;
            WSDL_tester.PUB01A.processResponse retVal = ((WSDL_tester.PUB01A.RDM_PUB01A)(this)).process(inValue);
            return retVal.Response;
        }

        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
        System.Threading.Tasks.Task<WSDL_tester.PUB01A.processResponse> WSDL_tester.PUB01A.RDM_PUB01A.processAsync(WSDL_tester.PUB01A.processRequest request) {
            return base.Channel.processAsync(request);
        }

        public System.Threading.Tasks.Task<WSDL_tester.PUB01A.processResponse> processAsync(WSDL_tester.PUB01A.Request Request) {
            WSDL_tester.PUB01A.processRequest inValue = new WSDL_tester.PUB01A.processRequest();
            inValue.Request = Request;
            return ((WSDL_tester.PUB01A.RDM_PUB01A)(this)).processAsync(inValue);
        }
    }
}


import requests
import sys

OLLAMA_URL = "http://127.0.0.1:11434/api/generate"  # Ollama API URL

def query_ollama(prompt, model="deepseek-r1:1.5b"):
    """ Sends a request to Ollama's API and returns the response """
    payload = {
        "model": model,
        "prompt": prompt,
        "stream": False  # Set to True if you want incremental responses
    }
    try:
        response = requests.post(OLLAMA_URL, json=payload)
        response.raise_for_status()
        return response.json().get("response", "⚠ No response received.")
    except requests.exceptions.RequestException as e:
        return f"🚨 Ollama API error: {e}"

def main():
    print("🟢 Connected to Ollama API")
    print("🟡 Type your input below. Type 'exit' to quit.\n")

    while True:
        user_input = input("> ")
        if user_input.lower() == "exit":
            print("👋 Exiting...")
            break

        print("🟢 Sending request to Ollama API...")
        response = query_ollama(user_input)
        print(f"📝 Ollama Response: {response}")

if __name__ == "__main__":
    main()


           toggleFunc(sessionId, option);
              }
            : null,
        child: Text(translate('Privacy mode')));
  }

  final privacyModeImpls =
      pi.platformAdditions[kPlatformAdditionsSupportedPrivacyModeImpl]
          as List<dynamic>?;
  if (privacyModeImpls == null) {
    return [
      getDefaultMenu((sid, opt) async {
        bind.sessionToggleOption(sessionId: sid, value: opt);
        togglePrivacyModeTime = DateTime.now();
      })
    ];
  }
  if (privacyModeImpls.isEmpty) {
    return [];
  }

  if (privacyModeImpls.length == 1) {
    final implKey = (privacyModeImpls[0] as List<dynamic>)[0] as String;
    return [
      getDefaultMenu((sid, opt) async {
        bind.sessionTogglePrivacyMode(
            sessionId: sid, implKey: implKey, on: privacyModeState.isEmpty);
        togglePrivacyModeTime = DateTime.now();
      })
    ];
  } else {
    return privacyModeImpls.map((e) {
      final implKey = (e as List<dynamic>)[0] as String;
      final implName = (e)[1] as String;
      return TToggleMenu(
          child: Text(translate(implName)),
          value: privacyModeState.value == implKey,
          onChanged: (value) {
            if (value == null) return;
            togglePrivacyModeTime = DateTime.now();
            bind.sessionTogglePrivacyMode(
                sessionId: sessionId, implKey: implKey, on: value);
          });
    }).toList();
  }
}

List<TToggleMenu> toolbarKeyboardToggles(FFI ffi) {
  final ffiModel = ffi.ffiModel;
  final pi = ffiModel.pi;
  final sessionId = ffi.sessionId;
  List<TToggleMenu> v = [];

  // swap key
  if (ffiModel.keyboard &&
      ((isMacOS && pi.platform != kPeerPlatformMacOS) ||
          (!isMacOS && pi.platform == kPeerPlatformMacOS))) {
    final option = 'allow_swap_key';
    final value =
        bind.sessionGetToggleOptionSync(sessionId: sessionId, arg: option);
    onChanged(bool? value) {
      if (value == null) return;
      bind.sessionToggleOption(sessionId: sessionId, value: option);
    }

    final enabled = !ffi.ffiModel.viewOnly;
    v.add(TToggleMenu(
        value: value,
        onChanged: enabled ? onChanged : null,
        child: Text(translate('Swap control-command key'))));
  }

  // reverse mouse wheel
  if (ffiModel.keyboard) {
    var optionValue =
        bind.sessionGetReverseMouseWheelSync(sessionId: sessionId) ?? '';
    if (optionValue == '') {
      optionValue = bind.mainGetUserDefaultOption(key: kKeyReverseMouseWheel);
    }
    onChanged(bool? value) async {
      if (value == null) return;
      await bind.sessionSetReverseMouseWheel(
          sessionId: sessionId, value: value ? 'Y' : 'N');
    }

    final enabled = !ffi.ffiModel.viewOnly;
    v.add(TToggleMenu(
        value: optionValue == 'Y',
        onChanged: enabled ? onChanged : null,
        child: Text(translate('Reverse mouse wheel'))));
  }

  // swap left right mouse
  if (ffiModel.keyboard) {
    final option = 'swap-left-right-mouse';
    final value =
        bind.sessionGetToggleOptionSync(sessionId: sessionId, arg: option);
    onChanged(bool? value) {
      if (value == null) return;
      bind.sessionToggleOption(sessionId: sessionId, value: option);
    }

    final enabled = !ffi.ffiModel.viewOnly;
    v.add(TToggleMenu(
        value: value,
        onChanged: enabled ? onChanged : null,
        child:


/*
 * Copyright (C) 2020 Apple Inc. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
 * THE POSSIBILITY OF SUCH DAMAGE.
 */

#pragma once

#include "FetchRequest.h"

namespace WebCore {

class DOMWindow;
class DeferredPromise;
class WorkerGlobalScope;

class WindowOrWorkerGlobalScopeFetch {
public:
    static void fetch(DOMWindow&, FetchRequest::Info&&, FetchRequest::Init&&, Ref<DeferredPromise>&&);
    static void fetch(WorkerGlobalScope&, FetchRequest::Info&&, FetchRequest::Init&&, Ref<DeferredPromise>&&);
};

} // namespace WebCore


ement: HTMLVideoElement, initialBitrate: number) {
        if (!this.mediaStream) {
            return;
        }
        this.videoElement = videoElement;

        const config: HlsJsConfiguration = { abrEwmaDefaultEstimate: initialBitrate * 1000 };

        if (videoElement.preload === 'none') {
            config.autoStartLoad = false;
            videoElement.addEventListener('play', this.attachOnPlay);
        }

        this.hls = new HlsJs(config);
        this.hls.on(HlsJs.Events.MANIFEST_PARSED, this.onManifestParsed);
        this.hls.on(HlsJs.Events.ERROR, this.onError);
        this.hls.loadSource(this.mediaStream.url);
        this.hls.attachMedia(videoElement);
    }

    public detach(videoElement: HTMLVideoElement) {
        if (!this.mediaStream) {
            return;
        }
        this.hls.off(HlsJs.Events.MANIFEST_PARSED, this.onManifestParsed);
        this.hls.off(HlsJs.Events.ERROR, this.onError);
        this.hls.destroy();
        this.hls = null;
        videoElement.removeEventListener('play', this.attachOnPlay);
        this.videoElement = null
    }

    public getMediaStreamDeliveryType() {
        return MediaStreamDeliveryType.ADAPTIVE_VIA_MSE;
    }

    public setMediaLevel(_newLevel: number, _videoElement: HTMLVideoElement) {
        // TODO
    }

    private attachOnPlay = () => {
        if (!this.videoElement) {
            return;
        }
        this.hls.startLoad();
        this.videoElement.removeEventListener('play', this.attachOnPlay);
    }

    private onManifestParsed = (
        _eventType: string,
        { levels = [] as HlsJsLevel[], firstLevel = -1 }
    ) => {
        const mediaLevels: MediaLevel[] = levels.map(level => {
            return { bitrate: level.bitrate, width: level.width, height: level.height, name: level.name };
        })
        this.emit('levels', mediaLevels);
        if (firstLevel >= 0) {
            this.emit('currentLevel', firstLevel);
        }
    }

    private onError = (_type: string, errorEvent: any) => {
        if (errorEvent && (errorEvent.details === 'manifestParsingError' || errorEvent.details === 'manifestLoadError')) {
            this.emit('error', Errors.SRC_LOAD_ERROR, this.mediaStream && this.mediaStream.url, errorEvent);
        }
    }

    public static isSupported(env: EnvironmentSupport): boolean {
        return env.MSE && HlsJs.isSupported();
    };

    public static canPlay(mediaType: string): boolean {
        return mediaType === MediaStreamTypes.HLS;
    }
}
import { LocationParameters } from "../../locationparameters.class";
import { Screen } from "../../screen.class";

export const toShow = async (
  received: Screen,
  needle: string,
  confidence?: number,
) => {
  let locationParams;
  if (confidence) {
    locationParams = new LocationParameters();
    locationParams.confidence = confidence;
  }
  try {
    await received.find(needle, locationParams);
    return {
      message: () => `Expected screen to not show ${needle}`,
      pass: true,
    };
  } catch (err) {
    return {
      message: () => `Screen is not showing ${needle}: ${err}`,
      pass: false,
    };
  }
};
import { fromEvent, merge, Observable } from 'rxjs'
import { EventTargetLike } from 'rxjs/internal/observable/fromEvent'
import { filter, map } from 'rxjs


0x4e530, 0x6fc38 bytes
    //
    _u71(sdk::unknown_ptr) create_etw_thread;

    // [EtwpCreateFile]
    // Ldr = [ntdll.dll]
    // => Windows 10 v1607, Windows 10 v2004, Windows 11, Windows 10 v20H2
    // ntdll.dll .text:0x64de8, 0x67960 bytes
    // ntdll.dll .text:0x4f134, 0x6fc38 bytes
    // ntdll.dll .text:0x60dac, 0x74648 bytes
    // ntdll.dll .text:0x4f134, 0x6fc38 bytes
    //
    _u72(sdk::unknown_ptr) create_file;

    // [EtwpCreateRegGuidsContext]
    // Ldr = [ntdll.dll]
    // => Windows 10 v1607, Windows 10 v2004, Windows 11, Windows 10 v20H2
    // ntdll.dll .text:0x1303c, 0x67960 bytes
    // ntdll.dll .text:0xaed4, 0x6fc38 bytes
    // ntdll.dll .text:0x60adc, 0x74648 bytes
    // ntdll.dll .text:0xaed4, 0x6fc38 bytes
    //
    _u73(sdk::unknown_ptr) create_reg_guids_context;

    // [EtwpEventApiCallback]
    // Ldr = [ntdll.dll]
    // => Windows 10 v1607, Windows 10 v2004, Windows 11, Windows 10 v20H2
    // ntdll.dll .text:0x13140, 0x67960 bytes
    // ntdll.dll .text:0xac74, 0x6fc38 bytes
    // ntdll.dll .text:0x309d4, 0x74648 bytes
    // ntdll.dll .text:0xac74, 0x6fc38 bytes
    //
    _u74(sdk::unknown_ptr) event_api_callback;

    // [EtwpFillProcessorStreamIndexMap]
    // Ldr = [ntdll.dll]
    // => Windows 10 v1607, Windows 10 v2004, Windows 11, Windows 10 v20H2
    // ntdll.dll .text:0x2dac, 0x67960 bytes
    // ntdll.dll .text:0x4c4f0, 0x6fc38 bytes
    // ntdll.dll .text:0x124160, 0x74648 bytes
    // ntdll.dll .text:0x4c4f0, 0x6fc38 bytes
    //
    _u75(sdk::unknown_ptr) fill_processor_stream_index_map;

    // [EtwpFinalizeLogFileHeader]
    // Ldr = [ntdll.dll]
    // => Windows 10 v1607, Windows 10 v2004, Windows 11, Windows 10 v20H2
    // ntdll.dll .text:0x639e0, 0x67960 bytes
    // ntdll.dll .text:0x4d878, 0x6fc38 bytes
    // ntdll.dll .text:0x5e714, 0x74648 bytes
    // ntdll.dll .text:0x4d878, 0x6fc38 bytes
    //
    _u76(sdk::unknown_ptr) finalize_log_file_header;

    // [EtwpFinalizeRelogFileHeaderStats]
    // Ldr = [ntdll.dll]
    // => Windows 10 v1607, Windows 10 v2004, Windows 11, Windows 10 v20H2
    // ntdll.dll .text:0x2f3c, 0x67960 bytes
    // ntdll.dll .text:0x86698, 0x6fc38 bytes
    // ntdll.dll .text:0x124d8c, 0x74648 bytes
    // ntdll.dll .text:0x86838, 0x6fc38 bytes
    //
    _u77(sdk::unknown_pt


if (instance != null) {
          instance.onRenderError(WXRenderErrorCode.WX_CREATE_INSTANCE_ERROR, "createInstance "
                                                                             + "fail!");
        }
        String err = "[WXBridgeManager] invokeCreateInstance: framework.js uninitialized.";
        WXErrorCode.WX_ERR_INVOKE_NATIVE.appendErrMsg(err);
        commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_INVOKE_NATIVE);
        WXLogUtils.e(err);
        return;
      }
      try {
        if (WXEnvironment.isApkDebugable()) {
          WXLogUtils.d("createInstance >>>> instanceId:" + instanceId
                       + ", options:"
                       + WXJsonUtils.fromObjectToJSONString(options)
                       + ", data:" + data);
        }
        WXJSObject instanceIdObj = new WXJSObject(WXJSObject.String,
                                                  instanceId);
        WXJSObject instanceObj = new WXJSObject(WXJSObject.String,
                                                template);
        WXJSObject optionsObj = new WXJSObject(WXJSObject.JSON,
                                               options == null ? "{}"
                                                               : WXJsonUtils.fromObjectToJSONString(options));
        WXJSObject dataObj = new WXJSObject(WXJSObject.JSON,
                                            data == null ? "{}" : data);
        WXJSObject[] args = {instanceIdObj, instanceObj, optionsObj,
            dataObj};
        invokeExecJS(instanceId, null, METHOD_CREATE_INSTANCE, args);
        commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_SUCCESS);
      } catch (Throwable e) {
        WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(instanceId);
        if (instance != null) {
          instance.onRenderError(WXRenderErrorCode.WX_CREATE_INSTANCE_ERROR,
                                 "createInstance failed!");
        }
        String err = "[WXBridgeManager] invokeCreateInstance " + e.getCause();
        WXErrorCode.WX_ERR_INVOKE_NATIVE.appendErrMsg(err);
        commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_INVOKE_NATIVE);
        WXLogUtils.e(err);
      }
    }
  }

  private void mock(String instanceId) {

  }

  public void destroyInstance(final String instanceId) {
    if ( mJSHandler == null
        || TextUtils.isEmpty(instanceId)) {
      return;
    }
    if(mDestroyedInstanceId!=null) {
      mDestroyedInstanceId.add(instanceId);
    }
    // clear message with instanceId
    mJSHandler.removeCallbacksAndMessages(instanceId);
    post(new Runnable() {
      @Override
      public void run() {
        removeTaskByInstance(instanceId);
        invokeDestroyInstance(instanceId);
      }
    }, instanceId);
  }

  private void removeTaskByInstance(String instanceId) {
    mNextTickTasks.removeFromMapAndStack(instanceId);
  }

  private void invokeDestroyInstance(String instanceId) {
    try {
      if (WXEnvironment.isApkDebugable()) {
        WXLogUtils.d("destroyInstance >>>> instanceId:" + instanceId);
      }
      WXJSObject instanceIdObj = new WXJSObject(WXJSObject.String,
                                                instanceId);
      WXJSObject[] args = {instanceIdObj};
      invokeExecJS(instanceId, null, METHOD_DESTROY_INSTANCE, args);
      commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_SUCCESS)


t:
                target+=buffer
                stoploss+=buffer

                plot_bar.append(close_values[i])
                plot_times.append(datetime_objects[i])
                print("Target hit, new target:",target)

            else:
                plot_bar.append(close_values[i])
                plot_times.append(datetime_objects[i])

    elif position=="Short":
        if ((close_values[i]>=stoploss) or (datetime_objects[i].hour==15 and datetime_objects[i].minute==29)):
            position="Empty"
            plot_bar.append(close_values[i])
            plot_times.append(datetime_objects[i])
            if close_values[i]>=entry:
                plt.plot(plot_times,plot_bar,color='r',marker='v')
            else:
                plt.plot(plot_times,plot_bar,color='g',marker='v')
            plot_bar.clear()
            plot_times.clear()
            print("Short exit at",close_values[i],"with",entry-close_values[i],"points")
            net+=entry-close_values[i]
            if ((-close_values[i]+entry)>0):
                Ptrade+=1
            else:
                Ltrade+=1

        elif close_values[i]<=target:
            target-=buffer
            stoploss-=buffer

            plot_bar.append(close_values[i])
            plot_times.append(datetime_objects[i])
            print("Target hit, new target:",target)

        else:
            plot_bar.append(close_values[i])
            plot_times.append(datetime_objects[i])

plt.title('Datetime vs Values')
plt.xlabel('Datetime')
plt.ylabel('Values')
plt.grid(True)
plt.xticks(rotation=45)  # Rotate x-axis labels for better readability
plt.tight_layout()

plt.show()

print("Net P/L:",net)
print("Ptrades:",Ptrade)
print("Ltrades:",Ltrade)


sets the controlling module on the z-axis.
        /// </summary>
        public ModuleBase Y
        {
            get { return Modules[2]; }
            set
            {
                Debug.Assert(value != null);
                Modules[2] = value;
            }
        }

        /// <summary>
        /// Gets or sets the controlling module on the z-axis.
        /// </summary>
        public ModuleBase Z
        {
            get { return Modules[3]; }
            set
            {
                Debug.Assert(value != null);
                Modules[3] = value;
            }
        }

        #endregion

        #region ModuleBase Members

        /// <summary>
        /// Returns the output value for the given input coordinates.
        /// </summary>
        /// <param name="x">The input coordinate on the x-axis.</param>
        /// <param name="y">The input coordinate on the y-axis.</param>
        /// <param name="z">The input coordinate on the z-axis.</param>
        /// <returns>The resulting output value.</returns>
        public override double GetValue(double x, double y, double z)
        {
            Debug.Assert(Modules[0] != null);
            Debug.Assert(Modules[1] != null);
            Debug.Assert(Modules[2] != null);
            Debug.Assert(Modules[3] != null);
            var dx = x + Modules[1].GetValue(x, y, z);
            var dy = y + Modules[2].GetValue(x, y, z);
            var dz = z + Modules[3].GetValue(x, y, z);
            return Modules[0].GetValue(dx, dy, dz);
        }

        #endregion
    }
}


Listener(MP.midlet);

		MP.display(t);
	}

	private void menuAction(int i) {
		if (i < menu.length) {
			if (menu[i] == LBack) {
				// just close
			} else if (menuItem == null) {
				switch (menu[i]) {
				case LRefresh:
					MP.midlet.commandAction(MP.latestCmd, this);
					break;
				case LChatInfo:
					openProfile();
					break;
				case LSearchMessages:
					MP.midlet.commandAction(MP.searchMsgCmd, this);
					break;
				case LSendSticker:
					MP.midlet.commandAction(MP.sendStickerCmd, this);
					break;
				case LWriteMessage:
					if (replyMsgId != 0 || editMsgId != 0) {
						int r = Math.max(replyMsgId, topMsgId);
						MP.display(MP.writeForm(id, r == 0 ? null : Integer.toString(r), text, editMsgId == 0 ? null : Integer.toString(editMsgId), null, null));
						resetInput();
						break;
					}
					MP.midlet.commandAction(MP.writeCmd, this);
					break;
				case LDelete: {
					deleteSelected();
					break;
				}
				case LForward: {
					forwardSelected();
					break;
				}
				case LOpenPlayer: {
					MP.midlet.commandAction(MP.playerCmd, this);
					break;
				}

				// input menu
				case LEdit: {
					showTextBox();
					break;
				}
				case LCancel: {
					back();
					break;
				}
				case LClear: {
					text = "";
					if (keyboard != null) {
						keyboard.setText("");
					}
				}
				case LSend: {
					send();
					break;
				}
				}
			} else {
				menuItem.menuAction(menu[i]);
			}
			closeMenu();
			queueRepaint();
		}
	}

	protected void sizeChanged(int width, int height) {
		skipRender = false;
		updateEditor = true;
		MP.smallPlainFontHeight = MP.smallPlainFont.getHeight();
		MP.smallPlainFontSpaceWidth = MP.smallPlainFont.charWidth(' ');
		MP.smallBoldFontHeight = MP.smallBoldFont.getHeight();
		MP.medPlainFontHeight = MP.medPlainFont.getHeight();
		MP.medBoldFontHeight = MP.medBoldFont.getHeight();
		queueRepaint();
	}

	// ui

	public void requestLayout(UIItem item) {
		if (layoutStart != null || item == null) {
			layoutStart = firstItem;
		} else {
			layoutStart = (UIItem) item;
		}
		if (!loading) queueRepaint();
	}

	private void layout(UIItem offsetItem, int w, int h) {
		if (count == 0 || offsetItem == null) return;
		boolean offset = false;
		if (offsetItem.prev != null) {
			offsetItem = offsetItem.prev;
			offset = true;
		}

		int prevScroll = scroll;
		int prevScrollItemY = 0;
		UIItem scrollItem = scrollCurrentItem;
		if (scrollItem != null) {
			prevScrollItemY = scrollItem.y;
		}

		UIItem item = offsetItem;
		int y = 0;
		do {
			if (offset && item == offsetItem) {
				y = item.y;
			} else {
				item.y = y;
			}
			y += item.layout(w);
		} while ((item = item.next) != null);

		contentHeight = y;

		if (prevScrollItemY != 0 && scroll != 0) {
			scroll = prevScroll - prevScrollItemY + scrollItem.y;
		}
	}

	void safeAdd(Thread thread, UIMessage item, boolean focus) {
		if (thread != this.thread) t


dom(Callable<boolean[]> factory) {
        try {
            boolean[] arr = factory.call();
            for (int i = 0; i < arr.length; i++) {
                arr[i] = R.nextBoolean();
            }
            return arr;
        } catch (Exception e) {
            throw new InternalError(e);
        }
    }
    static char[] fillCharRandom(Callable<char[]> factory) {
        try {
            char[] arr = factory.call();
            for (int i = 0; i < arr.length; i++) {
                arr[i] = (char)R.nextInt();
            }
            return arr;
        } catch (Exception e) {
            throw new InternalError(e);
        }
    }
    static int[] fillIntRandom(Callable<int[]> factory) {
        try {
            int[] arr = factory.call();
            for (int i = 0; i < arr.length; i++) {
                arr[i] = R.nextInt();
            }
            return arr;
        } catch (Exception e) {
            throw new InternalError(e);
        }
    }
    static long[] fillLongRandom(Callable<long[]> factory) {
        try {
            long[] arr = factory.call();
            for (int i = 0; i < arr.length; i++) {
                arr[i] = R.nextLong();
            }
            return arr;
        } catch (Exception e) {
            throw new InternalError(e);
        }
    }

    // ===================================================== //

    static final int SIZE = 128;

    public static void main(String[] args) {
        boolean[] br = new boolean[SIZE];
        boolean[] ba = fillBooleanRandom((()-> new boolean[SIZE]));
        boolean[] bb = fillBooleanRandom((()-> new boolean[SIZE]));

        short[] sr = new short[SIZE];
        char[] ca = fillCharRandom((()-> new char[SIZE]));
        char[] cb = fillCharRandom((()-> new char[SIZE]));

        int[] r = new int[SIZE];
        int[] a = fillIntRandom(()-> new int[SIZE]);
        int[] b = fillIntRandom(()-> new int[SIZE]);
        int[] c = fillIntRandom(()-> new int[SIZE]);
        int[] d = fillIntRandom(()-> new int[SIZE]);
        int[] e = fillIntRandom(()-> new int[SIZE]);
        int[] f = fillIntRandom(()-> new int[SIZE]);

        long[] rl = new long[SIZE];
        long[] al = fillLongRandom(() -> new long[SIZE]);
        long[] bl = fillLongRandom(() -> new long[SIZE]);
        long[] cl = fillLongRandom(() -> new long[SIZE]);

        for (int i = 0; i < 20_000; i++) {
            testSubWordBoolean(br, ba, bb);
            verifySubWordBoolean(br, ba, bb);

            testSubWordChar(sr, ca, cb);
            verifySubWordChar(sr, ca, cb);

            testInt1(r, a, b, c);
            verifyInt1(r, a, b, c);

            testInt2(r, a);
            verifyInt2(r, a);

            testInt3(r, a, b);
            verifyInt3(r, a, b);

            testInt4(r, a, b, c, d, e, f);
            verifyTest4(r, a, b, c, d, e, f);

            testLong(rl, al, bl, cl);
            verifyLong(rl, al, bl, cl);

        }
    }
}
/*
 * Copyright (c) 2014, 2023, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *


| 美食制作 | 怎样制作口感鲜美的意大利面条？ |
| 电影推荐 | 你能否推荐几部最近上映的好看电影？ |
| 名人简介 | 你了解网球运动员费德勒的职业生涯吗？ |
| 医疗咨询 | 我的父母都患有高血压，请问该如何调理饮食？ |
| 股票投资 | 目前市场形势如何？是否适合进行短线操盘？ |
| 环保建议 | 如何降低家庭的能耗和环境污染？ |
| 计算机科学领域研究趋势                             | 最近计算机科学领域的研究趋势是什么？                         |
| 气候变化对生态系统的影响                       | 气候变化如何影响生态系统的平衡和物种多样性？                 |
| 时下最流行的健身方法                                 | 哪种健身方法是目前最受欢迎的，为什么？                       |
| 未来十年内市场最有潜力的行业             | 未来十年，哪些行业将会有最大的增长潜力？                     |
| 古代中国历史上最重要的战役                   | 在古代中国历史中，哪一场战役对历史产生了最大的影响？         |
| 人工智能在医学领域的应用                       | 人工智能在医学领域的应用有哪些，对医疗行业会带来哪些影响？   |
| 著名小说家村上春树的作品风格             | 村上春树的小说作品都有哪些特点和风格？                       |
| 著名画家梵高的代表作品                           | 梵高有哪些著名的代表作品，这些作品有什么特点？               |
| 美国总统拜登的政策议程                           | 拜登总统的政策议程包括哪些内容，对美国未来的发展会有什么影响？ |
| 高考改革方案                                         | 最新的高考改革方案有哪些变化，对考生来说有什么影响？         |
| 编辑 | 如何将一张照片中的人物抠出来放在另一张背景图片上？ |
| 分类 | 一辆车被盗了，如何通过保险索赔程序获得最高赔偿？ |
| 开放生成 | 描述一个完美的夏日早晨的场景。 |
| 编辑 | 你如何将一篇文章的主题从“全球变暖”转换为“气候变化对极地生态系统的影响”？ |
| 开放生成 | 用五个词语描述音乐会现场的氛围。 |
| 分类 | 如果想要在亚马逊上购买一台电视，你需要注意什么方面？ |
| 开放生成 | 请用一句话描述“爱情”的意义。 |
| 编辑 | 如何将一篇论文的字数从5000字缩减到3000字而不失去内容的完整性？ |
| 分类 | 在新冠疫情期间，如何正确佩戴口罩？ |
| 开放生


-balloon", '\uefe2'),
    PASSPORT("bd2-passport", '\uefe3'),
    PASSPORT_ONE("bd2-passport-one", '\uefe4'),
    PAUSE("bd2-pause", '\uefe5'),
    PAUSE_ONE("bd2-pause-one", '\uefe6'),
    PAY_CODE("bd2-pay-code", '\uefe7'),
    PAY_CODE_ONE("bd2-pay-code-one", '\uefe8'),
    PAY_CODE_TWO("bd2-pay-code-two", '\uefe9'),
    PAYMENT_METHOD("bd2-payment-method", '\uefea'),
    PAYPAL("bd2-paypal", '\uefeb'),
    PEACH("bd2-peach", '\uefec'),
    PEAR("bd2-pear", '\uefed'),
    PEARL_OF_THE_ORIENT("bd2-pearl-of-the-orient", '\uefee'),
    PEAS("bd2-peas", '\uefef'),
    PENCIL("bd2-pencil", '\ueff0'),
    PENNANT("bd2-pennant", '\ueff1'),
    PENTAGON_ONE("bd2-pentagon-one", '\ueff2'),
    PEOPLE("bd2-people", '\ueff3'),
    PEOPLE_BOTTOM("bd2-people-bottom", '\ueff4'),
    PEOPLE_BOTTOM_CARD("bd2-people-bottom-card", '\ueff5'),
    PEOPLE_DELETE("bd2-people-delete", '\ueff6'),
    PEOPLE_DELETE_ONE("bd2-people-delete-one", '\ueff7'),
    PEOPLE_DOWNLOAD("bd2-people-download", '\ueff8'),
    PEOPLE_LEFT("bd2-people-left", '\ueff9'),
    PEOPLE_MINUS("bd2-people-minus", '\ueffa'),
    PEOPLE_MINUS_ONE("bd2-people-minus-one", '\ueffb'),
    PEOPLE_PLUS("bd2-people-plus", '\ueffc'),
    PEOPLE_PLUS_ONE("bd2-people-plus-one", '\ueffd'),
    PEOPLE_RIGHT("bd2-people-right", '\ueffe'),
    PEOPLES("bd2-peoples", '\uefff'),
    PEOPLE_SAFE("bd2-people-safe", '\uf000'),
    PEOPLE_SAFE_ONE("bd2-people-safe-one", '\uf001'),
    PEOPLE_SEARCH("bd2-people-search", '\uf002'),
    PEOPLE_SEARCH_ONE("bd2-people-search-one", '\uf003'),
    PEOPLE_SPEAK("bd2-people-speak", '\uf004'),
    PEOPLES_TWO("bd2-peoples-two", '\uf005'),
    PEOPLE_TOP("bd2-people-top", '\uf006'),
    PEOPLE_TOP_CARD("bd2-people-top-card", '\uf007'),
    PEOPLE_UNKNOWN("bd2-people-unknown", '\uf008'),
    PEOPLE_UPLOAD("bd2-people-upload", '\uf009'),
    PERCENTAGE("bd2-percentage", '\uf00a'),
    PERFORMANCE("bd2-performance", '\uf00b'),
    PERFUME("bd2-perfume", '\uf00c'),
    PERFUMER_BOTTLE("bd2-perfumer-bottle", '\uf00d'),
    PERIOD("bd2-period", '\uf00e'),
    PERMISSIONS("bd2-permissions", '\uf00f'),
    PERSONAL_COLLECTION("bd2-personal-collection", '\uf010'),
    PERSONAL_PRIVACY("bd2-personal-privacy", '\uf011'),
    PERSPECTIVE("bd2-perspective", '\uf012'),
    PESTICIDE("bd2-pesticide", '\uf013'


�就要对数据包进行分片(fragmentation)操作，使每一片的长度都小于或等于MTU。

 IP首部有两个字节表示整个IP数据包的长度，所以IP数据包最长只能为0xFFFF，就是65535字节。如果有意发送总长度超过65535 的IP报文，或构造畸形的IP碎片，部分老的操作系统在进行碎片重组处理时会导致系统崩溃或拒绝服务。

![2.3.3](./img/2.3.3.png)

![2.3.4](./img/2.3.4.png)

![2.3.5](./img/2.3.5.png)

![2.3.6](./img/2.3.6.png)

## **传输层协议安全性分析**

**TCP协议安全威胁**

![2.4.1](./img/2.4.1.png)

![2.4.2](./img/2.4.2.png)

![2.4.3](./img/2.4.3.png)

**序列号和确认号**（SYN用于初始化连接，而ACK则用于确认收到数据或者确认连接的建立）

•     **包1**：客户端发起建立连接请求，SYN标志为1，序 号 为 随 机 生 成 的 整 数951057939

•     **包2**：服务端响应客户端的建立连接请求，SYN和ACK标志均置为1，序号为随机生成的整数290218379，确认号为客户端的初始序号+1即：951057939 + 1 = 951057940

•     需要注意的是，尽管客户端没有发送任何有效数据，确认号还是被加1，这是因为接收的包中包含SYN或FIN标志位（并不会对有效数据的计数产生影响，因为含有SYN或FIN标志位的包并不携带有效数据）

•     **包3**：客户端对服务端的连接请求进行确认，ACK标志为1，序号为包2的确认号，即：951057940；而确认号为包2的序号加1，即：290218379 + 1 = 290218380

•     **包4**：这是TCP流中第一个携带有效数据的包（确切的说，是客户端发送的HTTP请求），序列号与前一个ACK报文一致，因为到上个包为止，还没有发送任何数据；确认号也与前一个ACK报文一致，因为客户端没有从服务端接收到任何数据。 包内携带发送给服务器的数据为479个字节。

•     **包5**：当上层处理HTTP请求时，服务端发送该包来确认客户端在包4中发来的数据，需要注意的是，确认号


i *vswitch.Interface) ifState {
	s := ifState{
		MTU:        i.MTU(),
		Enabled:    i.IsEnabled(),
		OperStatus: decodeLinkStatus(i),
		LastChange: i.LastChange(),
		Counters:   getCounters(i.Counter()),
		Driver:     i.Driver(),
		Device:     "",
	}

	if device, ok := i.Private().(string); ok {
		s.Device = device
	}

	switch s.Driver {
	case DriverDPDK, DriverRIF:
		s.IFType = IF_ETHERNETCSMACD
	case DriverTunnel:
		s.IFType = IF_TUNNEL
	default:
		s.IFType = IF_UNKNOWN
	}

	return s
}

func getIFStats(i *vswitch.Interface) ifStats {
	s := ifStats{
		State:         getIFState(i),
		Subinterfaces: make(map[int]subIFStats),
		Ethernet:      getEthernet(i),
		L2Tunnel:      getL2Tunnel(i.Tunnel()),
	}

	for _, vif := range i.VIF() {
		index, _ := strconv.Atoi(strings.Split(vif.Name(), "-")[1])
		s.Subinterfaces[index] = getSubIFStats(vif)
	}

	return s
}

func showIFs(v interface{}, key ocdcType, args []interface{}) (interface{}, error) {
	if key != ifInstances {
		log.Err("Unexpected key: %v", key)
		return string(internalErrMsg), nil
	}

	stats := make(map[string]ifStats)
	for _, i := range vswitch.Interfaces() {
		stats[i.String()] = getIFStats(i)
	}
	return outputResult(stats), nil
}

func showIF(v interface{}, key ocdcType, args []interface{}) (interface{}, error) {
	i := vswitch.GetInterface(args[0].(string))
	if i == nil {
		return outputErr("No such Interface: %v", args[0].(string)), nil
	}

	result := ""
	switch key {
	case ifStatus:
		result = outputResult(getIFStats(i))

	case ifStatusState:
		result = outputResult(getIFState(i))

	case ifCounters:
		result = outputResult(getCounters(i.Counter()))

	case ifEthernet:
		result = outputResult(getEthernet(i))

	case ifTunnel:
		result = outputResult(getL2Tunnel(i.Tunnel()))

	default:
		log.Err("Unexpected key: %v", key)
		result = string(internalErrMsg)
	}

	return result, nil
}

func showIFSubs(v interface{}, key ocdcType, args []interface{}) (interface{}, error) {
	if key != ifSubs {
		log.Err("Unexpected key: %v", key)
		return string(internalErrMsg), nil
	}

	ifName := args[0].(string)
	i := vswitch.GetInterface(ifName)
	if i == nil {
		return outputErr("No such Interface: %v", ifName), nil
	}
	stats := make(map[string]subIFStats)
	for _, vif := range i.VIF() {
		stats[vif.Name()] = getSubIFStats(vif)
	}

	return outputResult(stats), nil
}

func showIFSub(v interface{}, key ocdcType, args []interface{}) (interface{}, error) {
	vifName := fmt.Sprintf("%s-%d", args[0].(string), args[1].(int))
	vif := vswitch.GetVIFByName(vifName)
	if vif == nil {
		return outputErr("No such VIF: %v", vif


u01cR4IJVmhEewSX4zUOwIz6Oxz1fKnjPia6bQcONEjCdG79dVzvlCuE9g1tsSz2hq1p3KicWjfYY8yA/640?wx_fmt=png&from=appmsg "")

漏洞描述:

YAML-LibYAML在0.903.0之前的Pеrl版本使用2-аrɡѕ ореn,允许现有文件被修改

攻击场景:

攻击者可能通过上传恶意文件,利用LoadFile函数的漏洞,导致信息泄露。

影响产品:

所有使用LoadFile函数的版本

检测方法:

可以通过检查yaml-libyaml-pm的版本和使用的LoadFile函数来确定是否受影响,使用命令perl -MYAML::XS -e 'print $YAML::XS::VERSION'查看版本

修复建议:

安装补丁:

请访问https://github.com/ingydotnet/yaml-libyaml-pm获取最新版本的yaml-libyaml-pm,确保使用修复了该漏洞的版本。

其他修复方法:

建议在代码中使用三参数的open方法替代现有的两参数open方法,以避免文件截断问题。

建议用户立即更新到最新版本的уаml-libуаml-рm,并审查使用LоаdFilе函数的代码,确保不再使用两参数的ореn方法。

参考链接:

https://github.com/ingydotnet/yaml-libyaml-pm/issues/120

#  【安全圈】热门 Chrome 扩展陷 HTTP 和硬编码密钥双重漏洞
 安全圈   2025-06-07 11:00

![](https://mmbiz.qpic.cn/sz_mmbiz_png/aBHpjnrGylgOvEXHviaXu1fO2nLov9bZ055v7s8F6w1DD1I0bx2h3zaOx0Mibd5CngBwwj2nTeEbupw7xpBsx27Q/640?wx_fmt=other&from=appmsg&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1 "")

**关键词**

漏洞

![可用- Chrome](https://mmbiz.qpic.cn/sz_mmbiz_jpg/aBHpjnrGylhAjbiaATZKkd97aY46PjkJkPmiagq5noddlvCGrWLDicicOXRv6l8ibXUdceT4TegQQGTxZEOe0iaLbQ0A/640?wx_fmt=jpeg&from=appmsg "")

网络安全研究人员发现多款热门谷歌Chrome扩


office_efficiency_foot_bg.png")no-repeat bottom center;}
.office-efficiency-index .device-info-col .col-info .title{width:200px;}
.office-efficiency-index .device-info-col .col-info .title-icon{position:absolute; top:0px;right:10px;width:280px;height:50px;padding-right:10px;}
.office-efficiency-index .device-info-col .col-info .title-icon .device-alarm{float:right;font-size:25px;margin:5px 5px 0px 5px;}
.office-efficiency-index .device-info-col .col-info .title-icon .device-alarm span{color:#fff;padding-left:2px;padding-top:1px;}
.office-efficiency-index .device-info-col .col-info .content.deviceInfo table{width:100%;}
.office-efficiency-index .device-info-col .col-info .content.deviceInfo table td{width:25%;height:25px;padding:0px;margin:0px;}

.content.deviceInfo .device-img{text-align:center;}
.content.deviceInfo .device-img img{width:50px;height:45px;}
.content.deviceInfo .label-name{font-size:14px;width:80px;height:30px;line-height:30px;vertical-align:middle;white-space: nowrap;color:#fff;}
.content.deviceInfo .label-name .os-name{width:80px;height:30px;line-height:30px;vertical-align:middle;overflow:hidden;text-overflow:ellipsis;}
.content.deviceInfo .label-name.score{color:#E5BB2E;font-size:22px;font-weight:600;}
.content.deviceInfo .kuan-dai{text-align:center;}
.content.deviceInfo .kuan-dai .progress-label{float:left;margin-bottom:10px;text-align:left;color:#fff;font-size:16px;white-space:nowrap;width:100%;height:20px;line-height:20px;vertical-align:middle;}
.content.deviceInfo .nei-cun-size{width:70px;height:70px;background: url("../images/nei_cun_size.png")no-repeat center center;background-size:60px 60px;}
.content.deviceInfo .cpu-use{width:70px;height:70px;background: url("../images/cpu_use.png")no-repeat center center;background-size:60px 60px;}
.content.deviceInfo .nei-cun-use{width:70px;height:70px;background: url("../images/nei_cun_use.png")no-repeat center center;background-size:60px 60px;}
.content.deviceInfo .device-use span{display: block;font-size: 15px;font-weight: 500;color: #fff;line-height: 67px;text-align: center;vertical-align: middle;}
.content.deviceInfo .split-line{margin:15px;height:2px;background:linear-gradient(to left,#181C41,#7187AC,#181C41)}
.content.deviceInfo .labe-value{color:#fff;height:30px;line-height:30px;vertical-align:middle;}
.content.deviceInfo .progress-bar {background-color: #009AFD;}
/*耗时步骤分析详情*/
.office-efficiency-index .time-step-col .col-info{height:45rem;}
.office-efficiency-index .time-step-col .content{height:41rem;background: url("../images/office_efficiency_foot_bg.png")no-repeat bottom center;}
/*大屏*/
/*业务类型耗时分析详情*/
.office-efficiency-index .business-type-time-col .col-info{height:45rem;}
.office-efficiency-index .business-type-time-col .content{height:41rem;background: url("../images/office_efficiency_foot_bg.png")no-repeat bottom center;}

* {
    margin : 0;
    padding: 0;
}

html,
body {
    width   : 100%;
    overflow: hidden;
    height  : 100%;
}

body {
    background     : url(../images/53bg.png) no-repeat;
    background-size: 100%;
}

ul,
li {
    list-style: none;
}

// 引入外部字体

@font-face {
    font-family: 'LCdd';
    src        : url('../fonts/LCdd.TTF');
}

// 头部模块
header {
    height          : 12%;
    width           : 100%;
    background-color: #fff;
    background      : url(../images/53titlebg.png) no-repeat top center;
    background-size : 100%;
    text


ves performance. However, it might result in the Edge TPU thermal throttling, so it is recommended to have some sort of cooling mechanism in place.

| Raspberry Pi OS | High frequency mode | Version to download                        |
| --------------- | :-----------------: | ------------------------------------------ |
| Bullseye 32bit  |         No          | `libedgetpu1-std_ ... .bullseye_armhf.deb` |
| Bullseye 64bit  |         No          | `libedgetpu1-std_ ... .bullseye_arm64.deb` |
| Bullseye 32bit  |         Yes         | `libedgetpu1-max_ ... .bullseye_armhf.deb` |
| Bullseye 64bit  |         Yes         | `libedgetpu1-max_ ... .bullseye_arm64.deb` |
| Bookworm 32bit  |         No          | `libedgetpu1-std_ ... .bookworm_armhf.deb` |
| Bookworm 64bit  |         No          | `libedgetpu1-std_ ... .bookworm_arm64.deb` |
| Bookworm 32bit  |         Yes         | `libedgetpu1-max_ ... .bookworm_armhf.deb` |
| Bookworm 64bit  |         Yes         | `libedgetpu1-max_ ... .bookworm_arm64.deb` |

[Download the latest version from here](https://github.com/feranick/libedgetpu/releases).

After downloading the file, you can install it with the following command:

```bash
sudo dpkg -i path/to/package.deb
```

After installing the runtime, you need to plug in your Coral Edge TPU into a USB 3.0 port on your Raspberry Pi. This is because, according to the official guide, a new `udev` rule needs to take effect after installation.

???+ warning "Important"

    If you already have the Coral Edge TPU runtime installed, uninstall it using the following command.

    ```bash
    # If you installed the standard version
    sudo apt remove libedgetpu1-std

    # If you installed the high frequency version
    sudo apt remove libedgetpu1-max
    ```

## Export to Edge TPU

To use the Edge TPU, you need to convert your model into a compatible format. It is recommended that you run export on Google Colab, x86_64 Linux machine, using the official [Ultralytics Docker container](docker-quickstart.md), or using [Ultralytics HUB](../hub/quickstart.md), since the Edge TPU compiler is not available on ARM. See the [Export Mode](../modes/export.md) for the available arguments.

!!! example "Exporting the model"

    === "Python"

        ```python
        from ultralytics import YOLO

        # Load a model
        model = YOLO("path/to/model.pt")  # Load an official model or custom model

        # Export the model
        model.export(format="edgetpu")
        ```

    === "CLI"

        ```bash
        yolo export model=path/to/model.pt format=edgetpu # Export an official model or custom model
        ```

The exported model will be saved in the `<model_name>_saved_model/` folder with the name `<model_name>_full_integer_quant_edgetpu.tflite`. It is important that your model ends with the suffix `_edgetpu.tflite`, otherwise ultralytics doesn't know that you're using an Edge TPU model.

## Running the model

Before you can actually run the model, you will need to install the correct libraries.

If `tensorflow` is installed, uninstall tensorflow with the following command:

```bash
pip uninstall tensorflow tensorflow-aarch64
```

Then install/update `tflite-runtime`:

```bash
pip install -U tflite-runtime
```

Now you can run inference using the following code:

!!! example "Running the model"

    === "Python"

        ```python
        from ultralytics import YOLO

        # Load a model
        model = YOLO("path/to/<model_name>_full_integer_quant_edgetpu.tflite")


// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
// SPDX-License-Identifier: BSD-3-Clause
/**
 * @class   vtkPropCollection
 * @brief   an ordered list of Props
 *
 * vtkPropCollection represents and provides methods to manipulate a list of
 * Props (i.e., vtkProp and subclasses). The list is ordered and duplicate
 * entries are not prevented.
 *
 * @sa
 * vtkProp vtkCollection
 */

#ifndef vtkPropCollection_h
#define vtkPropCollection_h

#include "vtkCollection.h"
#include "vtkRenderingCoreModule.h" // For export macro

#include "vtkProp.h" // Needed for inline methods

VTK_ABI_NAMESPACE_BEGIN
class VTKRENDERINGCORE_EXPORT vtkPropCollection : public vtkCollection
{
public:
  static vtkPropCollection* New();
  vtkTypeMacro(vtkPropCollection, vtkCollection);
  void PrintSelf(ostream& os, vtkIndent indent) override;

  /**
   * Add a Prop to the bottom of the list.
   */
  void AddItem(vtkProp* a);

  /**
   * Get the next Prop in the list.
   */
  vtkProp* GetNextProp();

  /**
   * Get the last Prop in the list.
   */
  vtkProp* GetLastProp();

  /**
   * Get the number of paths contained in this list. (Recall that a
   * vtkProp can consist of multiple parts.) Used in picking and other
   * activities to get the parts of composite entities like vtkAssembly
   * or vtkPropAssembly.
   */
  int GetNumberOfPaths();

  /**
   * Reentrant safe way to get an object in a collection. Just pass the
   * same cookie back and forth.
   */
  vtkProp* GetNextProp(vtkCollectionSimpleIterator& cookie)
  {
    return static_cast<vtkProp*>(this->GetNextItemAsObject(cookie));
  }

protected:
  vtkPropCollection() = default;
  ~vtkPropCollection() override = default;

private:
  // hide the standard AddItem from the user and the compiler.
  void AddItem(vtkObject* o) { this->vtkCollection::AddItem(o); }

  vtkPropCollection(const vtkPropCollection&) = delete;
  void operator=(const vtkPropCollection&) = delete;
};

inline void vtkPropCollection::AddItem(vtkProp* a)
{
  this->vtkCollection::AddItem(a);
}

inline vtkProp* vtkPropCollection::GetNextProp()
{
  return static_cast<vtkProp*>(this->GetNextItemAsObject());
}

inline vtkProp* vtkPropCollection::GetLastProp()
{
  if (this->Bottom == nullptr)
  {
    return nullptr;
  }
  else
  {
    return static_cast<vtkProp*>(this->Bottom->Item);
  }
}

VTK_ABI_NAMESPACE_END
#endif


/* Copyright 2021 T.Shinohara
 *
 * 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, see <http://www.gnu.org/licenses/>.
 */

#include "rev1.h"

bool is_mac_mode(void) {
    return keymap_config.swap_lalt_lgui == false;
}

void set_mac_mode(bool macmode) {
    if (macmode) {
        /* The result is the same as pressing the AG_NORM(=MAGIC_UNSWAP_ALT_GUI) key. */
        /* https://github.com/qmk/qmk_firmware/blob/fb4a6ad30ea7a648acd59793ed4a30c3a8d8dc32/quantum/process_keycode/process_magic.c#L123-L124 */
        keymap_config.swap_lalt_lgui = keymap_config.swap_ralt_rgui = false;
    } else {
        /* The result is the same as pressing the AG_SWAP(=MAGIC_SWAP_ALT_GUI) key. */
        /* https://github.com/qmk/qmk_firmware/blob/fb4a6ad30ea7a648acd59793ed4a30c3a8d8dc32/quantum/process_keycode/process_magic.c#L80-L81 */
        keymap_config.swap_lalt_lgui = keymap_config.swap_ralt_rgui = true;
    }
}


 License 1.1,
the Change License after the Change Date as each is defined in accordance with the LICENSE file.
*/

// Generated by the protocol buffer compiler. DO NOT EDIT!
// NO CHECKED-IN PROTOBUF GENCODE
// source: v2_dataplane.proto

// Generated files should ignore deprecation warnings
@file:Suppress("DEPRECATION")
package io.seldon.mlops.inference.v2;

@kotlin.jvm.JvmName("-initializemodelMetadataRequest")
public inline fun modelMetadataRequest(block: io.seldon.mlops.inference.v2.ModelMetadataRequestKt.Dsl.() -> kotlin.Unit): io.seldon.mlops.inference.v2.V2Dataplane.ModelMetadataRequest =
  io.seldon.mlops.inference.v2.ModelMetadataRequestKt.Dsl._create(io.seldon.mlops.inference.v2.V2Dataplane.ModelMetadataRequest.newBuilder()).apply { block() }._build()
/**
 * Protobuf type `inference.ModelMetadataRequest`
 */
public object ModelMetadataRequestKt {
  @kotlin.OptIn(com.google.protobuf.kotlin.OnlyForUseByGeneratedProtoCode::class)
  @com.google.protobuf.kotlin.ProtoDslMarker
  public class Dsl private constructor(
    private val _builder: io.seldon.mlops.inference.v2.V2Dataplane.ModelMetadataRequest.Builder
  ) {
    public companion object {
      @kotlin.jvm.JvmSynthetic
      @kotlin.PublishedApi
      internal fun _create(builder: io.seldon.mlops.inference.v2.V2Dataplane.ModelMetadataRequest.Builder): Dsl = Dsl(builder)
    }

    @kotlin.jvm.JvmSynthetic
    @kotlin.PublishedApi
    internal fun _build(): io.seldon.mlops.inference.v2.V2Dataplane.ModelMetadataRequest = _builder.build()

    /**
     * ```
     * The name of the model.
     * ```
     *
     * `string name = 1;`
     */
    public var name: kotlin.String
      @JvmName("getName")
      get() = _builder.getName()
      @JvmName("setName")
      set(value) {
        _builder.setName(value)
      }
    /**
     * ```
     * The name of the model.
     * ```
     *
     * `string name = 1;`
     */
    public fun clearName() {
      _builder.clearName()
    }

    /**
     * ```
     * The version of the model to check for readiness. If not given the
     * server will choose a version based on the model and internal policy.
     * ```
     *
     * `string version = 2;`
     */
    public var version: kotlin.String
      @JvmName("getVersion")
      get() = _builder.getVersion()
      @JvmName("setVersion")
      set(value) {
        _builder.setVersion(value)
      }
    /**
     * ```
     * The version of the model to check for readiness. If not given the
     * server will choose a version based on the model and internal policy.
     * ```
     *
     * `string version = 2;`
     */
    public fun clearVersion() {
      _builder.clearVersion()
    }
  }
}
@kotlin.jvm.JvmSynthetic
public inline fun io.seldon.mlops.inference.v2.V2Dataplane.ModelMetadataRequest.copy(block: `io.seldon.mlops.inference.v2`.ModelMetadataRequestKt.Dsl.() -> kotlin.Unit): io.seldon.mlops.inference.v2.V2Dataplane.ModelMetadataRequest =
  `io.seldon.mlops.inference.v2`.ModelMetadataRequestKt.Dsl._create(this.toBuilder()).apply { block() }._build()

/*
Copyright (c) 2024 Seldon Technologies Ltd.

Use of this software is governed BY
(1) the license included in the LICENSE file or
(2) if the license included in the LICENSE file is th


了ToLua目录，需要自己手动，这里只是例子就不做配置了
        string fullPath = Application.dataPath + "/ToLua/Examples/02_ScriptsFromFile";
        lua.AddSearchPath(fullPath);
    }

    void OnGUI()
    {
        if (GUI.Button(new Rect(50, 50, 120, 45), "DoFile"))
        {
            lua.DoFile("ScriptsFromFile.lua");
        }
        else if (GUI.Button(new Rect(50, 150, 120, 45), "Require"))
        {
            lua.Require("ScriptsFromFile");
        }

        lua.Collect();
        lua.CheckTop();
    }

    void OnApplicationQuit()
    {
        lua.Dispose();
        lua = null;
    }
```
tolua#DoFile函数,跟lua保持一致行为,能多次执行一个文件。tolua#加入了新的Require函数,无论c#和lua谁先require一个lua文件, 都能保证加载唯一性<br>
* LuaState.AddSearchPath 增加搜索目录, 这样DoFile跟Require函数可以只用文件名,无需写全路径<br>
* LuaState.DoFile 加载一个lua文件, 注意dofile需要扩展名, 可反复执行, 后面的变量会覆盖之前的DoFile加载的变量<br>
* LuaState.Require 同lua require(modname)操作, 加载指定模块并且把结果写入到package.loaded中,如果modname存在, 则直接返回package.loaded[modname]<br>
* LuaState.Collect 垃圾回收, 对于被自动gc的LuaFunction, LuaTable, 以及委托减掉的LuaFunction, 延迟删除的Object之类。等等需要延迟处理的回收, 都在这里自动执行<br>

> **注意:** 虽然有文件加载,但此例子无法发布到手机, 如果ToLua目录不在/Assets目录下, 需要修改代码中的目录位置<br>

## 例子3 LuaFunction
展示了如何调用lua的函数, 主要代码如下:
``` csharp
    private string script =
        @"  function luaFunc(num)
                return num + 1
            end

            test = {}
            test.luaFunc = luaFunc
        ";

    LuaFunction luaFunc = null;
    LuaState lua = null;

    void Start ()
    {
        new LuaResLoader();
        lua = new LuaState();
        lua.Start();
        DelegateFactory.Init();
        lua.DoString(script);

        //Get the function object
        luaFunc = lua.GetFunction("test.luaFunc");

        if (func != null)
        {
            int num = luaFunc.Invoke<int, int>(123456);
            Debugger.Log("generic call return: {0}", num);

            num = CallFunc();
            Debugger.Log("expansion call return: {0}", num);

            Func<int, int> Func = luaFunc.ToDelegate<Func<int, int>>();
            num = Func(123456);
            Debugger.Log("Delegate call return: {0}", num);

            num = lua.Invoke<int, int>("test.luaFunc", 123456, true);
            Debugger.Log("luastate call return: {0}", num);


Days to the Wedding",
            "native": "結婚するって、本当ですか: 365 Days To The Wedding"
          },
          "description":
              "Takuya and Rika work at the same travel agency in Tokyo and are both happily introverted and single. But their company is opening a new branch in Alaska next year, and employees without a spouse will be recruited to work there. Desperate to avoid the move, and though they’ve hardly spoken before, they decide to fake an engagement. Can these quiet coworkers become a convincing couple?

\n\n(Source: Crunchyroll)",
          "bannerImage":
              "https://s4.anilist.co/file/anilistcdn/media/anime/banner/165790-Ght1ChketFbS.jpg",
          "averageScore": 67,
          "coverImage": {
            "large":
                "https://s4.anilist.co/file/anilistcdn/media/anime/cover/medium/bx165790-OwIZI9ArGR4Q.jpg"
          }
        },
        {
          "id": 21,
          "title": {
            "romaji": "ONE PIECE",
            "english": "ONE PIECE",
            "native": "ONE PIECE"
          },
          "description":
              "Gold Roger was known as the Pirate King, the strongest and most infamous being to have sailed the Grand Line. The capture and death of Roger by the World Government brought a change throughout the world. His last words before his death revealed the location of the greatest treasure in the world, One Piece. It was this revelation that brought about the Grand Age of Pirates, men who dreamed of finding One Piece (which promises an unlimited amount of riches and fame), and quite possibly the most coveted of titles for the person who found it, the title of the Pirate King.

\nEnter Monkey D. Luffy, a 17-year-old boy that defies your standard definition of a pirate. Rather than the popular persona of a wicked, hardened, toothless pirate who ransacks villages for fun, Luffy’s reason for being a pirate is one of pure wonder; the thought of an exciting adventure and meeting new and intriguing people, along with finding One Piece, are his reasons of becoming a pirate. Following in the footsteps of his childhood hero, Luffy and his crew travel across the Grand Line, experiencing crazy adventures, unveiling dark mysteries and battling strong enemies, all in order to reach One Piece.

\n*This includes following special episodes:
\n- Chopperman to the Rescue! Protect the TV Station by the Shore! (Episode 336)
\n- The Strongest Tag-Team! Luffy and Toriko's Hard Struggle! (Episode 492)
\n- Team Formation! Save Chopper (Episode 542)
\n- History's Strongest Collaboration vs. Glutton of the Sea (Episode 590)
\n- 20th Anniversary! Special Romance Dawn (Episode 907)",
          "bannerImage":
              "https://s4.anilist.co/file/anilistcdn/media/anime/banner/21-wf37VakJmZqs.jpg",
          "averageScore": 88,
          "coverImage": {
            "large":
                "https://s4.anilist.co/file/anilistcdn/media/anime/cover/medium/bx21-YCDoj1EkAxFn.jpg"
          }
        },
        {
          "id": 179919,
          "title": {
            "romaji": "NegaPosi Angler",
            "english": "Negative Positive Angler",
            "native": "ネガポジアングラー"
          },
          "description":
              "The anime's story centers on Tsunehiro Sasaki, a university student with a large debt and is told by his doctor that he only has two years left to live. Living the rest of his days in depression, Tsunehiro


-note {{Object 'a' is moved}}
    a.foo(); // peaceful-warning {{Method called on moved-from object 'a'}}
             // peaceful-note@-1 {{Method called on moved-from object 'a'}}
    a.b.foo(); // no-warning
  }
  {
    C c;
    C c1 = std::move(c); // peaceful-note {{Object 'c' is moved}}
    c.foo(); // peaceful-warning {{Method called on moved-from object 'c'}}
             // peaceful-note@-1 {{Method called on moved-from object 'c'}}
    c.b.foo(); // no-warning
  }
}

void resetSuperClass() {
  C c;
  C c1 = std::move(c);
  c.clear();
  C c2 = c; // no-warning
}

void resetSuperClass2() {
  C c;
  C c1 = std::move(c);
  c.reinit();
  C c2 = c; // no-warning
}

void reportSuperClass() {
  C c;
  C c1 = std::move(c); // peaceful-note {{Object 'c' is moved}}
  c.foo(); // peaceful-warning {{Method called on moved-from object 'c'}}
           // peaceful-note@-1 {{Method called on moved-from object 'c'}}
  C c2 = c; // no-warning
}

struct Empty {};

Empty inlinedCall() {
  // Used to warn because region 'e' failed to be cleaned up because no symbols
  // have ever died during the analysis and the checkDeadSymbols callback
  // was skipped entirely.
  Empty e{};
  return e; // no-warning
}

void checkInlinedCallZombies() {
  while (true)
    inlinedCall();
}

void checkLoopZombies() {
  while (true) {
    Empty e{};
    Empty f = std::move(e); // no-warning
  }
}

void checkMoreLoopZombies1(bool flag) {
  while (flag) {
    Empty e{};
    if (true)
      e; // expected-warning {{expression result unused}}
    Empty f = std::move(e); // no-warning
  }
}

bool coin();

void checkMoreLoopZombies2(bool flag) {
  while (flag) {
    Empty e{};
    while (coin())
      e; // expected-warning {{expression result unused}}
    Empty f = std::move(e); // no-warning
  }
}

void checkMoreLoopZombies3(bool flag) {
  while (flag) {
    Empty e{};
    do
      e; // expected-warning {{expression result unused}}
    while (coin());
    Empty f = std::move(e); // no-warning
  }
}

void checkMoreLoopZombies4(bool flag) {
  while (flag) {
    Empty e{};
    for (; coin();)
      e; // expected-warning {{expression result unused}}
    Empty f = std::move(e); // no-warning
  }
}

struct MoveOnlyWithDestructor {
  MoveOnlyWithDestructor();
  ~MoveOnlyWithDestructor();
  MoveOnlyWithDestructor(const MoveOnlyWithDestructor &m) = delete;
  MoveOnlyWithDestructor(MoveOnlyWithDestructor &&m);
};

MoveOnlyWithDestructor foo() {
  MoveOnlyWithDestructor m;
  return m;
}

class HasSTLField {
  std::vector<int> V;
  void testVector() {
    // Warn even in non-aggressive mode when it comes to STL, because
    // in STL the object is left in "valid but unspecified state" after move.
    std::vector<int> W = std::move(V); // expected-note {{Object 'V' of type 'std::vector' is left in a valid but unspecified state after move}}
    V.push_back(123); // expected-warning {{Method called on moved-from object 'V'}}
                      // expected-note@-1 {{Method called on moved-from object 'V'}}


self.physicsstate = PHYSICS_STATE.OBSTACLE
    self.inst:ListenForEvent("onputininventory", ChangeToItem)
    self.inst:ListenForEvent("ondropped", ChangeToObstacle)
end

function HeavyObstaclePhysics:MakeSmallObstacle()
    self.issmall = true
end

function HeavyObstaclePhysics:AddFallingStates()
    self.inst:ListenForEvent("startfalling", OnStartFalling)
    self.inst:ListenForEvent("stopfalling", OnStopFalling)
end

function HeavyObstaclePhysics:GetPhysicsState()
    return PHYSICS_STATE_NAMES[self.physicsstate]
end

function HeavyObstaclePhysics:IsItem()
    return self.physicsstate == PHYSICS_STATE.ITEM
end

function HeavyObstaclePhysics:IsObstacl


e seen as a specialized application-level firewall that supports the SOAP protocol; hence, it should be set up in parallel with the organization's firewall, which mediates other protocols.

The security server is equipped with the functionality needed to secure the message exchange between a client and a service provider.

-   Messages transmitted over the public Internet are secured using digital signatures and encryption.

-   The service provider's security server applies access control to incoming messages, thus ensuring that only those users that have signed an appropriate agreement with the service provider can access the data.

To increase the availability of the entire system, the service user's and service provider's security servers can be set up in a redundant configuration as follows.

-   One service user can use multiple security servers in parallel to perform requests.

-   If a service provider connects multiple security servers to the network to provide the same services, the requests are load-balanced between the security servers.

-   If one of the service provider's security servers goes offline, the requests are automatically redirected to other available security servers.

The security server also depends on a central server, which provides the global configuration.

### 1.2 Terms and abbreviations

See X-Road terms and abbreviations documentation \[[TA-TERMS](#Ref_TERMS)\].

### 1.3 References

1.  \[ASiC\] ETSI TS 102 918, Electronic Signatures and Infrastructures (ESI); Associated Signature Containers (ASiC)

2.  \[CRON\] Quartz Scheduler CRON expression,
    <http://www.quartz-scheduler.org/generated/2.2.1/html/qs-all/#page/Quartz_Scheduler_Documentation_Set%2Fco-trg_crontriggers.html>

3.  \[INI\] INI file,
    <http://en.wikipedia.org/wiki/INI_file>

4.  \[JDBC\] Connecting to the Database,
    <https://jdbc.postgresql.org/documentation/93/connect.html>

5.  \[JSON\] Introducing JSON,
    <http://json.org/>

6.  \[PR-MESS\] Cybernetica AS. X-Road: Message Protocol v4.0. Document ID: [PR-MESS](../Protocols/pr-mess_x-road_message_protocol.md)

7.  \[SPEC-AL\] Cybernetica AS. X-Road: Audit log events. Document ID: SPEC-AL

8.  \[PR-OPMON\] Cybernetica AS. X-Road: Operational Monitoring Protocol. Document ID: [PR-OPMON](../OperationalMonitoring/Protocols/pr-opmon_x-road_operational_monitoring_protocol_Y-1096-2.md)

9.  \[PR-OPMONJMX\] Cybernetica AS. X-Road: Operational Monitoring JMX Protocol. Document ID: [PR-OPMONJMX](../OperationalMonitoring/Protocols/pr-opmonjmx_x-road_operational_monitoring_jmx_protocol_Y-1096-3.md)

10. \[UG-OPMONSYSPAR\] Cybernetica AS. X-Road: Operational Monitoring System Parameters. Document ID: [PR-OPMONSYSPAR](../OperationalMonitoring/Manuals/ug-opmonsyspar_x-road_operational_monitoring_system_parameters_Y-1099-1.md)

11. \[IG-SS\] Cybernetica AS. X-Road: Security Server Installation Guide. Document ID: [IG-SS](ig


from __future__ import annotations

import json
from typing import Any

def extract_input_text_from_args(args: Any) -> tuple[str, str]:
    """
    Derive the primary input text from arbitrary tool args, preserving existing behavior.

    Returns a tuple of (input_text_content, input_json_string) where:
    - input_text_content: the best-effort string to use for guardrails
    - input_json_string: JSON dump of args, used as fallback and for logging

    Behavior (matches current inline logic):
    - If args is a dict, try common keys: message, text, content, input, query, prompt
    - If none found, use the first non-empty string value
    - If still none, fallback to JSON string of args
    - If args is not a dict, cast to str
    """
    try:
        input_json_string = json.dumps(args)
    except Exception:
        # In case non-serializable, use str
        input_json_string = str(args)

    if isinstance(args, dict):
        # Common keys in priority order
        for key in [
            "message",
            "text",
            "content",
            "input",
            "query",
            "prompt",
        ]:
            value = args.get(key)
            if isinstance(value, str) and value.strip():
                return value, input_json_string

        # First non-empty string value
        for value in args.values():
            if isinstance(value, str) and value.strip():
                return value, input_json_string

        # Fallback
        return input_json_string, input_json_string

    # Non-dict: best-effort string
    return str(args), input_json_string


                break;
                case 2432497: //赤兔马骑宠永久使用券
                    mountid = 80011029;
                    expiration_days = -1;
                    break;
                case 2430707: //好朋友坐骑7天使用券
                    mountid = 80001348;
                    expiration_days = -1;
                    break;
                case 2430464: //国庆纪念版热气球永久权
                    mountid = 80001120;
                    expiration_days = -1;
                    break;
                case 2432735: //熊猫骑宠永久券
                    mountid = 80001112;
                    expiration_days = -1;
                    break;
                case 2432733: //雄鹰！骑宠永久券
                    mountid = 80001552;
                    expiration_days = -1;
                    break;
                case 2432487: //LV骑宠永久券 -os
                    mountid = 80001531;
                    expiration_days = -1;
                    break;
                case 2432496: //舞狮骑宠永久使用权 -os
                    mountid = 80011028;
                    expiration_days = -1;
                    break;
                case 2432518: //幽灵马车骑宠永久使用券 -os
                    mountid = 80011030;
                    expiration_days = -1;
                    break;
                case 2430534: //企鹅永久权使用券
                    mountid = 80001113;
                    expiration_days = -1;
                    break;
//                case 2430620: //红火恐龙90天使用券
//                    mountid = 80001127;
//                    expiration_days = 30;
//                    break;
                case 2430992: //藏獒骑宠7天使用券
                    mountid = 80001181;
                    expiration_days = 7;
                    break;
                case 2430993: //藏獒骑宠30天使用券
                    mountid = 80001181;
                    expiration_days = 30;
                    break;
                case 2430994: //藏獒骑宠90天使用券
                    mountid = 80001181;
                    expiration_days = 90;
                    break;
//                case 2430794: //宇宙船骑宠 -os
//                    mountid = 80001163;
//                    expiration_days = 7;
//                    break;
//                case 2430726: //双跳银狼战车骑宠30天使用券
//                    mountid = 80001144;
//                    expiration_days = 30;
//                    break;
//                case 2430727: //双跳红卡车骑宠30天使用券
//                    mountid = 80001148;
//                    expiration_days = 30;
//                    break;
//                case 2430728: //双跳强力机甲骑宠30天使用券
//                    mountid = 80001149;
//                    expiration_days = 30;
//                    break;
//                case 2431364: //双变形金刚骑宠30天使用券
//                    mountid = 80001183;
//                    expiration_days = 30;
//                    break;
//                case 2430934: //双神兽骑宠永久使用券
//                    mountid = 80001185;
//                    expiration_days = -1;
//                    break;
//                case 2430936: //双熊热气球骑宠永久使用券
//                    mountid = 80001187;
//                    expiration_days = -1;
//                    break;
//                case 2430933: //双梦魇骑宠永久使用券
//                    mountid = 80001184;
//                    expiration_days = -1;
//                    break;
//                case 2430935: //双猫头鹰骑宠永久使用券


#pragma once

// @generated by torchgen/gen.py from Function.h

#include <ATen/Context.h>
#include <ATen/DeviceGuard.h>
#include <ATen/TensorUtils.h>
#include <ATen/TracerMode.h>
#include <ATen/core/Generator.h>
#include <ATen/core/Reduction.h>
#include <ATen/core/Tensor.h>
#include <c10/core/Scalar.h>
#include <c10/core/Storage.h>
#include <c10/core/TensorOptions.h>
#include <c10/util/Deprecated.h>
#include <c10/util/Optional.h>

#include <ATen/ops/channel_shuffle_ops.h>

namespace at {

// aten::channel_shuffle(Tensor self, int groups) -> Tensor
inline at::Tensor channel_shuffle(const at::Tensor & self, int64_t groups) {
    return at::_ops::channel_shuffle::call(self, groups);
}

// aten::channel_shuffle.out(Tensor self, int groups, *, Tensor(a!) out) -> Tensor(a!)
inline at::Tensor & channel_shuffle_out(at::Tensor & out, const at::Tensor & self, int64_t groups) {
    return at::_ops::channel_shuffle_out::call(self, groups, out);
}
// aten::channel_shuffle.out(Tensor self, int groups, *, Tensor(a!) out) -> Tensor(a!)
inline at::Tensor & channel_shuffle_outf(const at::Tensor & self, int64_t groups, at::Tensor & out) {
    return at::_ops::channel_shuffle_out::call(self, groups, out);
}

}


OPENAI_DATASET_MEAN = (0.48145466, 0.4578275, 0.40821073)
OPENAI_DATASET_STD = (0.26862954, 0.26130258, 0.27577711)
IMAGENET_MEAN = (0.485, 0.456, 0.406)
IMAGENET_STD = (0.229, 0.224, 0.225)
INCEPTION_MEAN = (0.5, 0.5, 0.5)
INCEPTION_STD = (0.5, 0.5, 0.5)


1g7SUFDQSxJQUFJLFVBQVVDLElBQUksQ0FBQ0QsV0FBVztRQUMxQixPQUFPO0lBQ1gsT0FDSyxJQUFJLFdBQVdDLElBQUksQ0FBQ0QsV0FBVztRQUNoQyxPQUFPO0lBQ1gsT0FDSztRQUNELE9BQU87SUFDWDtBQUNKLEVBQ0EsMERBQTBEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9Ac29sYW5hL3dhbGxldC1hZGFwdGVyLXJlYWN0L2xpYi9lc20vZ2V0SW5mZXJyZWRDbHVzdGVyRnJvbUVuZHBvaW50LmpzPzIzY2QiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0SW5mZXJyZWRDbHVzdGVyRnJvbUVuZHBvaW50KGVuZHBvaW50KSB7XG4gICAgaWYgKCFlbmRwb2ludCkge1xuICAgICAgICByZXR1cm4gJ21haW5uZXQtYmV0YSc7XG4gICAgfVxuICAgIGlmICgvZGV2bmV0L2kudGVzdChlbmRwb2ludCkpIHtcbiAgICAgICAgcmV0dXJuICdkZXZuZXQnO1xuICAgIH1cbiAgICBlbHNlIGlmICgvdGVzdG5ldC9pLnRlc3QoZW5kcG9pbnQpKSB7XG4gICAgICAgIHJldHVybiAndGVzdG5ldCc7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gJ21haW5uZXQtYmV0YSc7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2V0SW5mZXJyZWRDbHVzdGVyRnJvbUVuZHBvaW50LmpzLm1hcCJdLCJuYW1lcyI6WyJnZXRJbmZlcnJlZENsdXN0ZXJGcm9tRW5kcG9pbnQiLCJlbmRwb2ludCIsInRlc3QiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/../node_modules/@solana/wallet-adapter-react/lib/esm/getInferredClusterFromEndpoint.js\n");

/***/ }),

/***/ "(ssr)/../node_modules/@solana/wallet-adapter-react/lib/esm/useConnection.js":
/*!*****************************************************************************!*\
  !*** ../node_modules/@solana/wallet-adapter-react/lib/esm/useConnection.js ***!
  \*****************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   ConnectionContext: () => (/* binding */ ConnectionContext),\n/* harmony export */   useConnection: () => (/* binding */ useConnection)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"(ssr)/../node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\");\n\nconst ConnectionContext = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.cre


g, args ...interface{}) {
}

func (v *void) Errorf(format string, args ...interface{}) {
}

// New returns a new metrics service. If one has been instantiated already, no new instance will be created.
func New(
	cmd *cobra.Command,
	l *logrusx.Logger,
	c *configx.Provider,
	o *Options,
) *Service {
	lock.Lock()
	defer lock.Unlock()

	if instance != nil {
		return instance
	}

	o.StartTime = time.Now()

	if o.BuildTime == "" {
		o.BuildTime = "unknown"
	}

	if o.BuildVersion == "" {
		o.BuildVersion = "unknown"
	}

	if o.BuildHash == "" {
		o.BuildHash = "unknown"
	}

	if o.Config == nil {
		o.Config = &analytics.Config{
			Interval: time.Hour * 6,
		}
	}

	o.Config.Logger = new(void)

	if o.MemoryInterval < time.Minute {
		o.MemoryInterval = time.Hour * 12
	}

	segment, err := analytics.NewWithConfig(o.WriteKey, *o.Config)
	if err != nil {
		l.WithError(err).Fatalf("Unable to initialise software quality assurance features.")
		return nil
	}

	optOut, err := cmd.Flags().GetBool("sqa-opt-out")
	if err != nil {
		cmdx.Must(err, `Unable to get command line flag "sqa-opt-out": %s`, err)
	}

	if !optOut {
		optOut = c.Bool("sqa.opt_out")
	}

	if !optOut {
		optOut = c.Bool("sqa_opt_out")
	}

	if !optOut {
		optOut, _ = strconv.ParseBool(os.Getenv("SQA_OPT_OUT"))
	}

	if !optOut {
		optOut, _ = strconv.ParseBool(os.Getenv("SQA-OPT-OUT"))
	}

	if !optOut {
		l.Info("Software quality assurance features are enabled. Learn more at: https://www.ory.sh/docs/ecosystem/sqa")
	}

	m := &Service{
		optOut:     optOut,
		instanceId: uuid.Must(uuid.NewV4()).String(),
		o:          o,
		c:          segment,
		l:          l,
		mem:        new(MemoryStatistics),
	}

	instance = m

	go m.Identify()
	go m.Track()

	return m
}

// Identify enables reporting to segment.
func (sw *Service) Identify() {
	IdentifySend(sw, true)

	// User has not opt-out then make identify to be sent every 6 hours
	if !sw.optOut {
		for range time.Tick(time.Hour * 6) {
			IdentifySend(sw, false)
		}
	}
}

func IdentifySend(sw *Service, startup bool) {
	if err := resilience.Retry(sw.l, time.Minute*5, time.Hour*6, func() error {
		return sw.c.Enqueue(analytics.Identify{
			InstanceId:   sw.instanceId,
			DeploymentId: sw.o.DeploymentId,
			Project:      sw.o.Service,

			DatabaseDialect:  sw.o.DBDialect,
			ProductVersion:   sw.o.BuildVersion,
			ProductBuild:     sw.o.BuildHash,
			UptimeDeployment: 0,
			UptimeInstance:   math.Round(time.Since(sw.o.StartTime).Seconds()),
			IsDevelopment:    sw.o.IsDevelopment,
			IsOptOut:         sw.optOut,
			Startup:          startup,
		})
	}); err != nil {
		sw.l.WithError(err).Debug("Could not commit anonymized environment information")
	}
}

// Track commits memory statistics to segment.
func (sw *Service) Track() {
	if sw.optOut {
		return
	}

	for {
		sw.mem.Update()
		if err := sw.c.Enqueue(analytics.Track{
			InstanceId:   sw.instance


[38010] = "스컬지 학살자 모자",
[38011] = "고문관의 살덩이매듭 다리보호구",
[38012] = "로타라르 숲방랑자의 팔보호구",
[38013] = "로타라르 숲방랑자의 어깨보호구",
[38014] = "졸개감독 건들릿",
[38023] = "상어잡이잠수부의 다리보호구",
[38024] = "신록의 고리 장화",
[38025] = "현자의 장갑",
[38026] = "상어잡이잠수부의 팔보호구",
[38027] = "신록의 사냥꾼 가면",
[38028] = "내세의 반지",
[38029] = "하늘빛 사냥꾼 장갑",
[38030] = "잊혀진 대장의 흉갑",
[38031] = "하늘빛 사냥꾼 다리보호구",
[38032] = "고룡노예 목줄",
[38033] = "얼음 심장 흉갑",
[38034] = "톱니 사슬 허리띠",
[38035] = "단단히 죄인 사슬망 장화",
[38036] = "잊혀진 용병의 고리",
[38037] = "서풍의 어깨갑옷",
[38039] = "얼음절단 어깨갑옷",
[38040] = "얼음절단 손목보호구",
[38041] = "서풍의 허리띠",
[38042] = "스컬지 구울 목줄",
[38043] = "아눕아르 허물 다리보호구",
[38044] = "아눕아르 허물 어깨보호구",
[38045] = "아눕아르 허물 투구",
[38046] = "고룡불길 장갑",
[38047] = "유령의 정수 허리띠",
[38048] = "이글거리는 껍질의 흉갑",
[38049] = "고룡 추격자의 허리보호대",
[38050] = "영혼의 무역상 봉화",
[38051] = "별의 쉼터 장화",
[38053] = "고룡불길 고리 갑옷",
[38054] = "고통전도자의 손목보호구",
[38055] = "산마루 사냥꾼의 건틀릿",


csharp .highlight .s {
  color:#A31515
}

.type-csharp .highlight .sc {
  color:#A31515
}

a {
  text-decoration: none;
  color: #0388a6;
  -webkit-transition-property: color;
  -moz-transition-property: color;
  -o-transition-property: color;
  transition-property: color;
  -webkit-transition-duration: 0.3s;
  -moz-transition-duration: 0.3s;
  -o-transition-duration: 0.3s;
  transition-duration: 0.3s;
}

a:hover {
  color: #04b1d8;
}
@font-face{font-family:'FontAwesome';src:url("/templates/rock/font/fontawesome-webfont.eot");src:url("/templates/rock/font/fontawesome-webfont.eot?#iefix") format("embedded-opentype"),url("/templates/rock/font/fontawesome-webfont.woff") format("woff"),url("/font/fontawesome-webfont.ttf") format("truetype"),url("/templates/rock/font/fontawesome-webfont.svgz#FontAwesomeRegular") format("svg"),url("/templates/rock/font/fontawesome-webfont.svg#FontAwesomeRegular") format("svg");font-weight:normal;font-style:normal}
*{margin:0;padding:0}
body{font-family:"HelveticaNeue-Light","Helvetica Neue Light","Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:300;font-size:14px;background:#eee;color:#666}
@media screen and (max-width:1040px){body{margin:0 20px}
}
@media screen and (max-width:600px){body{font-size:13px}
}
h1{font-size:1.8em}
h2{font-size:1.5em}
h3{font-size:1.3em}
a{text-decoration:none;outline-width:0;color:#258fb8}
.basic-alignment.left,article .entry-content img.left,article .entry-content video.left{float:left;margin-right:1.5em}
.basic-alignment.right,article .entry-content img.right,article .entry-content video.right{float:right;margin-left:1.5em}
.basic-alignment.center,article .entry-content img.center,article .entry-content video.center{display:block;margin:0 auto 1.5em}
.basic-alignment.left,article .entry-content img.left,article .entry-content video.left,.basic-alignment.right,article .entry-content img.right,article .entry-content video.right{margin-bottom:.8em}
.alignleft{float:left}
.alignright{float:right}
.clearfix{*zoom:1}
.clearfix:after{content:"";display:table;clear:both}
.inner{width:1000px;margin:0 auto}
@media screen and (max-width:1040px){.inner{width:100%}
}
.pullquote-right:before,.pullquote-left:before{padding:0;border:none;content:attr(data-pullquote);float:right;width:45%;margin:0.5em 0 1em 1.5em;position:relative;top:7px;font-size:1.4em;line-height:1.45em}
.pullquote-left:before{float:left;margin:0.5em 1.5em 1em 0}
#header{height:30px;padding:30px 0;border-bottom:1px solid #ddd;line-he