,
    "standing cable face pull",
    [Equipment.cableTower],
    [rom, gripSqueeze],
  ),
  const Ex(
    vaHighRowRearDeltFlyRearDeltRaiseShoulderPullFacePull,
    "seated cable face pull",
    [Equipment.cableRowMachine],
    [rom, gripSqueeze],
  ),
  const Ex(
    vaHighRowRearDeltFlyRearDeltRaiseShoulderPullFacePull,
    "TRX face pull",
    [Equipment.trx],
    [rom, gripSqueeze],
  ),

  /*
 *     .d8888b.  888    888 8888888888  .d8888b. 88888888888
 *    d88P  Y88b 888    888 888        d88P  Y88b    888
 *    888    888 888    888 888        Y88b.         888
 *    888        8888888888 8888888     "Y888b.      888
 *    888        888    888 888            "Y88b.    888
 *    888    888 888    888 888              "888    888
 *    Y88b  d88P 888    888 888        Y88b  d88P    888
 *     "Y8888P"  888    888 8888888888  "Y8888P"     888
*/
  const Ex(
    vaBenchPressBBChestPressMachineDip,
    "flat barbell bench press (powerlift)",
    [Equipment.barbell],
    [rom, gripSqueeze],
  ),
  Ex(
    vaBenchPressBBChestPressMachineDip,
    "barbell bench press",
    [Equipment.barbell],
    [rom, gripSqueeze, benchPressBenchAngle],
    ratingJNBBBenchPress.toList(),
  ),
  Ex(
    vaBenchPressDBChestPressCable,
    "dumbbell bench press",
    [Equipment.dumbbell],
    [rom, gripSqueeze, benchPressBenchAngle],
    ratingJNDBBenchPress.toList(),
  ),
  const Ex(
    vaBenchPressBBChestPressMachineDip,
    "bench press smith machine",
    [Equipment.smithMachineAngled],
    [rom, gripSqueeze, benchPressBenchAngle],
  ),

  const Ex(
    vaBenchPressBBChestPressMachineDip,
    "chest press machine",
    [Equipment.chestPressMachine],
    [rom, gripSqueeze],
    [ratingJNMachineChestPress],
  ),

  const Ex(vaPushUp, "push-up", [], [rom, deficit], [ratingJNPushUp, ratingJNPushUpDeficit]),

  const Ex(
    vaBenchPressDBChestPressCable,
    "cable chest press",
    [Equipment.cableTowerDual],
    [rom, gripSqueeze, benchPressBenchAngle],
  ),

  const Ex(vaBenchPressBBChestPressMachineDip, "dip", [], [rom, gripSqueeze], [ratingJNDips]),
  const Ex(
    vaBenchPressBBChestPressMachineDip,
    "assisted dip machine",
    [Equipment.assistedDipMachine],
    [rom, gripSqueeze],
  ),
  const Ex(
    vaFlyPecDeckHandGrip,
    "dumbbell fly",
    [Equipment.dumbbell],
    [rom, flyThumbs, gripSqueeze],
    [ratingJNDumbbellFly],
  ),
  const Ex(
    vaFlyPecDeckHandGrip,
    "chest fly machine",
    [Equipment.chestFlyMachine],
    [rom, gripSqueeze, flyThumbs],
  ),

  const Ex(
    vaFlyPecDeckHandGrip,
    "bayesian fly",
    [Equipment.cableTower],
    [rom, gripSqueeze, flyThumbs],
  ), // TODO: what makes it bayesian? machine vs single


--[[
Name: AceAddon-2.0
Revision: $Rev: 14832 $
Developed by: The Ace Development Team (http://www.wowace.com/index.php/The_Ace_Development_Team)
Inspired By: Ace 1.x by Turan (turan@gryphon.com)
Website: http://www.wowace.com/
Documentation: http://www.wowace.com/index.php/AceAddon-2.0
SVN: http://svn.wowace.com/root/trunk/Ace2/AceAddon-2.0
Description: Base for all Ace addons to inherit from.
Dependencies: AceLibrary, AceOO-2.0, AceEvent-2.0, (optional) AceConsole-2.0
]]

local MAJOR_VERSION = "AceAddon-2.0"
local MINOR_VERSION = "$Revision: 14832 $"

-- This ensures the code is only executed if the libary doesn't already exist, or is a newer version
if not AceLibrary then error(MAJOR_VERSION .. " requires AceLibrary.") end
if not AceLibrary:IsNewVersion(MAJOR_VERSION, MINOR_VERSION) then return end

if not AceLibrary:HasInstance("AceOO-2.0") then error(MAJOR_VERSION .. " requires AceOO-2.0.") end

-- Localization
local STANDBY, TITLE, NOTES, VERSION, AUTHOR, DATE, CATEGORY, EMAIL, WEBSITE, CATEGORIES, ABOUT, PRINT_ADDON_INFO
if GetLocale() == "deDE" then
	STANDBY = "|cffff5050(Standby)|r" -- capitalized

	TITLE = "Titel"
	NOTES = "Anmerkung"
	VERSION = "Version"
	AUTHOR = "Autor"
	DATE = "Datum"
	CATEGORY = "Kategorie"
	EMAIL = "E-mail"
	WEBSITE = "Webseite"

	ABOUT = "\195\188ber"
	PRINT_ADDON_INFO = "Gibt Addondaten aus"

	CATEGORIES = {
		["Action Bars"] = "Aktionsleisten",
		["Auction"] = "Auktion",
		["Audio"] = "Audio",
		["Battlegrounds/PvP"] = "Schlachtfeld/PvP",
		["Buffs"] = "Buffs",
		["Chat/Communication"] = "Chat/Kommunikation",
		["Druid"] = "Druide",
		["Hunter"] = "Jger",
		["Mage"] = "Magier",
		["Paladin"] = "Paladin",
		["Priest"] = "Priester",
		["Rogue"] = "Schurke",
		["Shaman"] = "Schamane",
		["Warlock"] = "Hexenmeister",
		["Warrior"] = "Krieger",
		["Healer"] = "Heiler",
		["Tank"] = "Tank", -- noone use "Brecher"...
		["Caster"] = "Caster",
		["Combat"] = "Kampf",
		["Compilations"] = "Compilations", -- whats that o_O
		["Data Export"] = "Datenexport",
		["Development Tools"] = "Entwicklungs Tools",
		["Guild"] = "Gilde",
		["Frame Modification"] = "Frame Modifikation",
		["Interface Enhancements"] = "Interface Verbesserungen",
		["Inventory"] = "Inventar",
		["Library"] = "Library",
		["Map"] =


 function(
        coordinates: PointType
    ): number {
        return Math.sqrt(Math.pow(coordinates[0], 2) + Math.pow(coordinates[1], 2));
    },

    HEXtoRGBA: function(
        color: string,
        opacity?: number
    ): [number, number, number, number] {
        const rgba: [number, number, number, number] = [0, 0, 0, 1];
        if (color.length === 4) {
            rgba[0] = parseInt(color.substring(1, 2) + color.substring(1, 2), 16);
            rgba[1] = parseInt(color.substring(2, 3) + color.substring(2, 3), 16);
            rgba[2] = parseInt(color.substring(3) + color.substring(3), 16);
        }
        if (color.length === 7) {
            rgba[0] = parseInt(color.substring(1, 3), 16);
            rgba[1] = parseInt(color.substring(3, 5), 16);
            rgba[2] = parseInt(color.substring(5), 16);
        }
        if (opacity || opacity === 0) {
            rgba[3] = opacity;
        }
        return rgba;
    },

    RGBtoRGBA: function(
        color: string
    ): [number, number, number, number] {
        const parsedStroke = color.match(/\d{1,3}(\.\d+)?/g);
        const rgba: [number, number, number, number] = [
            +parsedStroke[0],
            +parsedStroke[1],
            +parsedStroke[2],
            1
        ];
        if ( parsedStroke[3] === '0' ) {
            rgba[3] = 0;
        } else {
            rgba[3] = +parsedStroke[3] || 1;
        }
        return rgba;
    },

    changeColor : function(
        start,
        end,
        shift: number
    ): string {
        const result = [];

        if ( isRGBA(start) || isRGB(start) ) {
            start = TRIGONOMETRY.RGBtoRGBA(start);
        } else if ( isHEXColor(start) ) {
            start = TRIGONOMETRY.HEXtoRGBA(start)
        }

        if ( isRGBA(end) || isRGB(end) ) {
            end = TRIGONOMETRY.RGBtoRGBA(end);
        } else if ( isHEXColor(end) ) {
            end = TRIGONOMETRY.HEXtoRGBA(end)
        }

        for (let i = 0; i < 3; i++) {
            result[i] = Math.round(+start[i] + (+end[i] - +start[i]) / 100 * shift);
        }
        const opacity = +(+start[3] + (+end[3] - +start[3]) / 100 * shift).toFixed(4);
        return 'rgba(' + result[0] + ',' + result[1] + ',' + result[2] + ',' + opacity + ')';
    },

    factorial : function (number: number) {
        let result = 1;
        while (number) {
            result *= number--;
        }
        return result;
    },

    getAngleOfVector: function(
        point: PointType,
        center: PointType
    ): number {
        center = center || [0, 0];
        point = point || [0, 0];
        point = [point[0] - center[0], point[1] - center[1]];
        const distance = TRIGONOMETRY.getCenterToPointDistance(point);
        const angle = Math.asin(point[1] / distance);
        const acos  = Math.acos(point[0] / distance);
        if (acos > Math.PI / 2) {
            return Math.PI - angle;
        }
        return angle;
    },

    getLengthOfCurve: function (
        points: PointType[],
        step: number
    ) {
        step = step || 1;
        let result = 0;
        let lastPoint = points[0];
        for (let sift = 0; sift <= 100; sift += step) {
            const coord = TRIGONOMETRY.getPointOnCurve(si


ait foo.userModel.upsert(senderId, { repliedAt: new Date().toISOString() })

  //
  return foo.reply(senderId, messageText)
}

const receivedMessage = async (event, foo) => {
  const senderId = event.sender.id;
  const recipientId = event.recipient.id;
  const timeOfMessage = event.timestamp;
  const message = event.message;

  console.log("Received message for user %d and page %d at %d with message:",
    senderId, recipientId, timeOfMessage);
  console.log(JSON.stringify(message));

  const isEcho = message.is_echo;
  const messageId = message.mid;
  const appId = message.app_id;
  const metadata = message.metadata;

  // You may get a text or attachment but not both
  const messageText = message.text;
  const messageAttachments = message.attachments;
  const quickReply = message.quick_reply;

  if (isEcho) {
    // Just logging message echoes to console
    console.log("Received echo for message %s and app %d with metadata %s",
      messageId, appId, metadata);
    return;
  } else if (quickReply) {
    const quickReplyPayload = quickReply.payload;
    console.log("Quick reply for message %s with payload %s",
      messageId, quickReplyPayload);

    return foo.responder.sendTextMessage(senderId, "Quick reply tapped");
  }

  if (messageText) {
    await _handleMessageText(foo, senderId, messageText).catch(err => {
      console.error(err)
      foo.responder.sendTextMessage(senderId, err.message)
    })
    return
  } else if (messageAttachments) {
    foo.responder.sendTextMessage(senderId, "Message with attachment received");
  } else {
    // hm?
  }
}

module.exports = { receivedMessage }import { Injectable } from '@angular/core';
import { Charter } from '../classes/Character';

@Injectable({
  providedIn: 'root'
})
export class CharactersService {

  public characters : Charter[] = [
    { // TOT 255
      name : "Ninja",
      charId : 1,
      lifePoints : 1500,
      str : 60,
      def : 45,
      dex : 100,
      int : 50,
      skill : false,
      urlimg : "/assets/img/charter/charter1.png"
    },
    {
      name : "Arrow",
      charId : 2,
      lifePoints : 1600,
      str : 65,
      def : 50,
      dex : 90,
      int : 50,
      skill : false,
      urlimg : "/assets/img/charter/charter2.png"
    },
    {
      name : "Titan",
      charId : 3,
      lifePoints : 800,
      str : 100,
      def : 100,
      dex : 30,
      int : 25,
      skill : false,
      urlimg : "/assets/img/charter/charter3.png"
    },
    {
      name : "Wizard",
      charId : 4,
      lifePoints : 1900,
      str : 40,
      def : 90,
      dex : 25,
      int : 100,
      skill : false,
      urlimg : "/assets/img/charter/charter4.png"
    },
    {
      name : "Thunder",
      charId : 5,
      lifePoints : 1600,
      str : 40,
      def : 45,
      dex : 70,
      int : 100,
      skill : false,
      urlimg : "/assets/img/charter/charter5.png"
    },
    {
      name : "Sword",
      charId : 6,
      lifePoints : 1400,
      str : 100,
      def : 60,
      dex : 60,
      int : 35,
      skill : false,
      urlimg : "/assets/img/charter/charter6.png"
    },


G12":
        return 1;
      case "ABCDEFG13":
        return 2;
      case "ABCDEFG14":
        return 3;
      case "ABCDEFG15":
        return 4;
      case "ABCDEFG16":
        return 5;
      case "ABCDEFG17":
        return 6;
      case "ABCDEFG18":
        return 7;
      case "ABCDEFG19":
        return 8;
      case "ABCDEFG20":
        return 9;
      default:
        return -1;
    }
  }

  private String[] data;

  @Setup
  public void setupStrings() {
    Random random = new Random();
    data = new String[getSize()];
    for (int i=0; i<getSize(); i++) {
      data[i] = "ABCDEFG" + random.nextInt(22);
    }
  }

  @Benchmark public final void testStringsSwitch(Blackhole bh) {
    int size = getSize();
    for (int i = 0; i < size; i++) {
      bh.consume(stringSwitch(data[i]));
    }
  }

  enum MyEnum {
    ITEM1, ITEM2, ITEM3, ITEM4, ITEM5, ITEM6, ITEM7, ITEM8, ITEM9, ITEM10, ITEM11, ITEM12, ITEM13, ITEM14, ITEM15, ITEM16, ITEM17, ITEM18, ITEM19, ITEM20, ITEM21, ITEM22, ITEM23, ITEM24, ITEM25, ITEM26, ITEM27, ITEM28, ITEM29, ITEM30, ITEM31, ITEM32, ITEM33, ITEM34, ITEM35, ITEM36, ITEM37, ITEM38, ITEM39, ITEM40, ITEM41, ITEM42, ITEM43, ITEM44, ITEM45, ITEM46, ITEM47, ITEM48, ITEM49, ITEM50, ITEM51, ITEM52, ITEM53, ITEM54, ITEM55, ITEM56, ITEM57, ITEM58, ITEM59, ITEM60, ITEM61, ITEM62, ITEM63, ITEM64, ITEM65, ITEM66, ITEM67, ITEM68, ITEM69, ITEM70, ITEM71, ITEM72, ITEM73, ITEM74, ITEM75, ITEM76, ITEM77, ITEM78, ITEM79, ITEM80, ITEM81, ITEM82, ITEM83, ITEM84, ITEM85, ITEM86, ITEM87, ITEM88, ITEM89, ITEM90, ITEM91, ITEM92, ITEM93, ITEM94, ITEM95, ITEM96, ITEM97, ITEM98, ITEM99, ITEM100
  }

  @CompilerControl(CompilerControl.Mode.DONT_INLINE)
  public final int enumSwitch(MyEnum x) {
    switch (x) {
      case ITEM5: return 1;
      case ITEM10: return 2;
      case ITEM15: return 3;
      case ITEM20: return 4;
      case ITEM25: return 5;
      case ITEM30: return 6;
      case ITEM35: return 7;
      case ITEM40: return 8;
      case ITEM45: return 9;
      case ITEM50: return 10;
      case ITEM55: return 11;
      case ITEM60: return 12;
      case ITEM65: return 13;
      case ITEM70: return 14;
      case ITEM75: return 15;
      case ITEM80: return 16;
      case ITEM85: return 17;
      case ITEM90: return 18;
      case ITEM95: return 19;
      case ITEM100: return 20;
      default: return -1;
    }
  }

  @CompilerControl(CompilerControl.Mode.DONT_INLINE)
  public final int denseEnumSwitch(MyEnum x) {
    switch (x) {
      case ITEM1: return 1;
      case ITEM2: return 2;
      case ITEM3: return 3;
      case ITEM4: return 4;
      case ITEM5: return 5;
      case ITEM6: return 6;
      case ITEM7: return 7;
      case ITEM8: return 8;
      case ITEM9: return 9;
      case ITEM10: return 10;
      case ITEM11: return 11;
      ca


	     * @param {WordArray|string} key The secret key.
	     *
	     * @return {WordArray} The HMAC.
	     *
	     * @static
	     *
	     * @example
	     *
	     *     var hmac = CryptoJS.HmacSHA256(message, key);
	     */
	    C.HmacSHA256 = Hasher._createHmacHelper(SHA256);
	}(Math));

	return CryptoJS.SHA256;

}));;(function (root, factory, undef) {
	if (typeof exports === "object") {
		// CommonJS
		module.exports = exports = factory(require("./core"), require("./cipher-core"));
	}
	else if (typeof define === "function" && define.amd) {
		// AMD
		define(["./core", "./cipher-core"], factory);
	}
	else {
		// Global (browser)
		factory(root.CryptoJS);
	}
}(this, function (CryptoJS) {

	/** @preserve
	 * Counter block mode compatible with  Dr Brian Gladman fileenc.c
	 * derived from CryptoJS.mode.CTR
	 * Jan Hruby jhruby.web@gmail.com
	 */
	CryptoJS.mode.CTRGladman = (function () {
	    var CTRGladman = CryptoJS.lib.BlockCipherMode.extend();

		function incWord(word)
		{
			if (((word >> 24) & 0xff) === 0xff) { //overflow
			var b1 = (word >> 16)&0xff;
			var b2 = (word >> 8)&0xff;
			var b3 = word & 0xff;

			if (b1 === 0xff) // overflow b1
			{
			b1 = 0;
			if (b2 === 0xff)
			{
				b2 = 0;
				if (b3 === 0xff)
				{
					b3 = 0;
				}
				else
				{
					++b3;
				}
			}
			else
			{
				++b2;
			}
			}
			else
			{
			++b1;
			}

			word = 0;
			word += (b1 << 16);
			word += (b2 << 8);
			word += b3;
			}
			else
			{
			word += (0x01 << 24);
			}
			return word;
		}

		function incCounter(counter)
		{
			if ((counter[0] = incWord(counter[0])) === 0)
			{
				// encr_data in fileenc.c from  Dr Brian Gladman's counts only with DWORD j < 8
				counter[1] = incWord(counter[1]);
			}
			return counter;
		}

	    var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({
	        processBlock: function (words, offset) {
	            // Shortcuts
	            var cipher = this._cipher
	            var blockSize = cipher.blockSize;
	            var iv = this._iv;
	            var counter = this._counter;

	            // Generate keystream
	            if (iv) {
	                counter = this._counter = iv.slice(0);

	                // Remove IV for subsequent blocks
	                this._iv = undefined;
	            }

				incCounter(counter);

				var keystream = counter.slice(0);
	            cipher.encryptBlock(keystream, 0);

	            // Encrypt
	            for (var i = 0; i < blockSize; i++) {
	                words[offset + i] ^= keystream[i];
	            }
	        }
	    });

	    CTRGladman.Decryptor = Encryptor;

	    return CTRGladman;
	}());

	return CryptoJS.mode.CTRGladman;

}));;(function (root, factory, undef) {
	if (typeof exports === "object") {
		// CommonJS
		module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./


�── jindo_writer.go
│   └── libjindosdk_go.so
└── main.go

2 directories, 13 files
```

### Golang Demo 程序

**注意**：需替换 endpoint、accessKeyId、accessKeySecret、user、bucket等参数。

```golang
package main

import (
	"bytes"
	"fmt"
	"jindo-gosdk-demo/jindo"
	"strings"
	"time"
)

func main() {
	option := map[string]string{
		jindo.JdoOptLoggerDir:            "/tmp/",
		jindo.JdoOptLoggerAppender:       "file",
		jindo.JdoOptLoggerLevel:          "2",
		jindo.JdoOptLoggerVerbose:        "0",
		jindo.JdoOptLoggerSync:           "true",
		jindo.JdoOptLoggerProgram:        "jindo-gosdk-demo",
		jindo.JdoOptOssEndpoint:          "<your oss/oss-hdfs endpoint>",
		jindo.JdoOptOssSecondLevelDomain: "true",
		jindo.JdoOptOssDataLakeStorage:   "true",
		jindo.JdoOptOssAccessKeyId:       "<your access key id>",
		jindo.JdoOptOssAccessKeySecret:   "<your access key secret>",
	}
	user := "<your user name>"
	bucket := "<your oss/oss-hdfs bucket name>"
	rootPath := "oss://" + bucket + "/"
	testDir := rootPath + "test-go-example/"

	// init sdk
	fs := jindo.NewJdoFileSystem()
	if err := fs.Init(rootPath, user, option); err != nil {
		panic(err.Message)
	}
	defer fs.Free()

	// clean testDir
	_ = fs.Remove(testDir, true)

	// mkdir testDir
	if err := fs.Mkdir(testDir, false); err != nil {
		fmt.Printf("failed to mkdir, %d: %s\n", err.Code, err.Message)
	} else {
		fmt.Printf("success to mkdir\n")
	}

	// write 10 files (each size 10MB) under testDir
	data := strings.Repeat("abcd", 1024*1024*10)
	current := time.Now().Unix()
	for idx := 0; idx < 10; idx++ {
		path := fmt.Sprintf(testDir+"test_%d_%d", current, idx)
		writer, err := fs.OpenWriter(path, 1024*1024)
		if err != nil {
			panic(err.Message)
		}
		start := time.Now().Unix()
		if cnt, err := writer.Write(bytes.NewReader([]byte(data))); err != nil {
			panic(err.Message)
		} else if err := writer.Flush(); err != nil {
			panic(err.Message)
		} else {
			writer.Free()
			fmt.Printf("success to write %d: %d, takes: %d sec\n", idx, cnt, time.Now().Unix()-start)
		}
	}

	// chmod 777 to testDir
	err := fs.SetPermission(testDir, 0777)
	if err != nil {
		panic(err.Message)
	}

	// chown testDir to testuser & testgroup
	err = fs.SetOwner(testDir, "testuser", "testgroup")
	if err != nil {
		panic(err.Message)
	}

	// getFileInfo of testDir
	fileInfo, err := fs.GetFileInfo(testDir)
	if err != nil {
		panic(err.Message)
	}
	if !fileInfo.IsDir() {
		panic(testDir + " should be dir")
	}
	fmt.Printf("success to getInfo %s, user %s, group %s, Length %d, Mtime %d, Atime %d\n",
		fileInfo.Name, fileInfo.User, fileInfo.Group, fileInfo.Length, fileInfo.MTimeMilliSec,


e()
	test.TestGet(validNewTenant())
}

func TestList(t *testing.T) {
	storage, server := newStorage(t)
	defer server.Terminate(t)
	defer storage.store.DestroyFunc()
	test := genericregistrytest.New(t, storage.store).ClusterScope()
	test.TestList(validNewTenant())
}

func TestWatch(t *testing.T) {
	storage, server := newStorage(t)
	defer server.Terminate(t)
	defer storage.store.DestroyFunc()
	test := genericregistrytest.New(t, storage.store).ClusterScope()
	test.TestWatch(
		validNewTenant(),
		// matching labels
		[]labels.Set{},
		// not matching labels
		[]labels.Set{
			{"foo": "bar"},
		},
		// matching fields
		[]fields.Set{
			{"metadata.name": "foo"},
			{"name": "foo"},
		},
		// not matching fields
		[]fields.Set{
			{"metadata.name": "bar"},
		},
	)
}

func TestDeleteTenantWithIncompleteFinalizers(t *testing.T) {
	storage, server := newStorage(t)
	defer server.Terminate(t)
	defer storage.store.DestroyFunc()
	key := "tenants/foo"
	ctx := genericapirequest.NewContext()
	now := metav1.Now()
	tenant := &api.Tenant{
		ObjectMeta: metav1.ObjectMeta{
			Name:              "foo",
			DeletionTimestamp: &now,
		},
		Spec: api.TenantSpec{
			StorageClusterId: "1",
			Finalizers:       []api.FinalizerName{api.FinalizerKubernetes},
		},
		Status: api.TenantStatus{Phase: api.TenantActive},
	}
	if err := storage.store.Storage.Create(ctx, key, tenant, nil, 0, false); err != nil {
		t.Fatalf("unexpected error: %v", err)
	}
	if _, _, err := storage.Delete(ctx, "foo", rest.ValidateAllObjectFunc, nil); err == nil {
		t.Errorf("unexpected no error")
	}
	// should still exist
	_, err := storage.Get(ctx, "foo", &metav1.GetOptions{})
	if err != nil {
		t.Errorf("unexpected error: %v", err)
	}
}

func TestUpdateDeletingTenantWithIncompleteMetadataFinalizers(t *testing.T) {
	storage, server := newStorage(t)
	defer server.Terminate(t)
	defer storage.store.DestroyFunc()
	key := "tenants/foo"
	ctx := genericapirequest.NewContext()
	now := metav1.Now()
	tenant := &api.Tenant{
		ObjectMeta: metav1.ObjectMeta{
			Name:              "foo",
			DeletionTimestamp: &now,
			Finalizers:        []string{"example.com/foo"},
		},
		Spec: api.TenantSpec{
			StorageClusterId: "1",
			Finalizers:       []api.FinalizerName{},
		},
		Status: api.TenantStatus{Phase: api.TenantActive},
	}
	if err := storage.store.Storage.Create(ctx, key, tenant, nil, 0, false); err != nil {
		t.Fatalf("unexpected error: %v", err)
	}
	ns, err := storage.Get(ctx, "foo", &metav1.GetOptions{})
	if err != nil {
		t.Fatalf("unexpected error: %v", err)
	}
	if _, _, err = storage.Update(ctx, "foo", rest.DefaultUpdatedObjectInfo(ns), rest.ValidateAllObjectFunc, rest.ValidateAllObjectUpdateFunc, false, &metav1.UpdateOptions{}); err != nil {
		t.Fatalf("unexpected error: %v", err)
	}


 {
    body::after {
        content: 'small'
    }
}

@media (min-width: 1024px) {
    body::after {
        content: 'medium'
    }
}

@media (min-width: 1440px) {
    body::after {
        content: 'large'
    }
}

[lang='ja'] body {
    font-family: "Roboto", "Noto Sans CJK JP", "Noto Sans JP", Arial, Helvetica, sans-serif
}

[lang='ko'] body {
    font-family: "Roboto", "Noto Sans CJK KR", "Noto Sans KR", Arial, Helvetica, sans-serif
}

[lang='zh-CN'] body {
    font-family: "Roboto", "Noto Sans CJK SC", "Noto Sans SC", Arial, Helvetica, sans-serif
}

[lang='zh-TW'] body {
    font-family: "Roboto", "Noto Sans CJK TC", "Noto Sans TC", Arial, Helvetica, sans-serif
}

h1, h2, h3, h4, h5, h6 {
    font-size: 18px;
    font-weight: 300
}

h1.h-has-top-margin, h2.h-has-top-margin, h3.h-has-top-margin, h4.h-has-top-margin, h5.h-has-top-margin, h6.h-has-top-margin {
    margin-top: 16px
}

h1.h-has-bottom-margin, h2.h-has-bottom-margin, h3.h-has-bottom-margin, h4.h-has-bottom-margin, h5.h-has-bottom-margin, h6.h-has-bottom-margin {
    margin-bottom: 16px
}

h1.h-has-top-bottom-margin, h2.h-has-top-bottom-margin, h3.h-has-top-bottom-margin, h4.h-has-top-bottom-margin, h5.h-has-top-bottom-margin, h6.h-has-top-bottom-margin {
    margin-bottom: 16px;
    margin-top: 16px
}

p, .h-c-copy {
    line-height: 1.71429;
    font-size: 14px;
    letter-spacing: .25px
}

p.h-c-copy--lead, .h-c-copy--lead.h-c-copy {
    font-size: 18px;
    line-height: 1.44444
}

p.h-has-top-margin, .h-has-top-margin.h-c-copy {
    margin-top: 12px
}

p.h-has-bottom-margin, .h-has-bottom-margin.h-c-copy {
    margin-bottom: 12px
}

p.h-has-top-bottom-margin, .h-has-top-bottom-margin.h-c-copy {
    margin-bottom: 12px;
    margin-top: 12px
}

p.h-c-copy--print, .h-c-copy--print.h-c-copy {
    text-indent: 24px
}

p.h-c-copy--print + p.h-c-copy--print, .h-c-copy--print.h-c-copy + p.h-c-copy--print, p.h-c-copy--print + .h-c-copy--print.h-c-copy, .h-c-copy--print.h-c-copy + .h-c-copy--print.h-c-copy {
    margin-top: 0
}

p + p, .h-c-copy + p, p + .h-c-copy, .h-c-copy + .h-c-copy {
    margin-top: 12px
}

@media (min-width: 600px) {
    p, .h-c-copy {
        line-height: 1.71429;
        font-size: 14px;
        letter-spacing: .25px
    }
}

@media (min-widt


#ifndef _lmic_config_h_
#define _lmic_config_h_

// In the original LMIC code, these config values were defined on the
// gcc commandline. Since Arduino does not allow easily modifying the
// compiler commandline, use this file instead.

#ifdef LMIC_104_EXPERIMENTAL
constexpr bool lorawan_v104 = true;
#else
constexpr bool lorawan_v104 = false;
#endif

// 16 μs per tick
// LMIC requires ticks to be 15.5μs - 100 μs long
#define US_PER_OSTICK_EXPONENT 4
#define US_PER_OSTICK (1 << US_PER_OSTICK_EXPONENT)
#define OSTICKS_PER_SEC (1000000 / US_PER_OSTICK)

// Set this to 1 to enable some basic debug output (using printf) about
// RF settings used during transmission and reception. Set to 2 to
// enable more verbose output. Make sure that printf is actually
// configured (e.g. on AVR it is not by default), otherwise using it can
// cause crashing.

#ifdef LMIC_DEBUG_LEVEL
constexpr int debugLevel = LMIC_DEBUG_LEVEL;
#else
constexpr int debugLevel = 1;
#endif

// Define time to prepare radio for RX in ms
// depend on MCU
#ifndef LMIC_RX_RAMPUP_MS
#define LMIC_RX_RAMPUP_MS 40000
#endif

// Define time to prepare radio for TX in ms
// depend on MCU
#ifndef LMIC_TX_RAMPUP_MS
#define LMIC_TX_RAMPUP_MS 2000
#endif

// Enable this to allow using printf() to print to the given serial port
// (or any other Print object).
#ifndef LMIC_PRINTF_TO
#define LMIC_PRINTF_TO Serial
#endif

#ifndef LMIC_MAX_BUFFER_LENGTH
#define LMIC_MAX_BUFFER_LENGTH 64
#endif

// Any runtime assertion failures are printed to this serial port (or
// any other Print object). If this is unset, any failures just silently
// halt execution.
// #define LMIC_FAILURE_TO Serial

// In LoRaWAN, a gateway applies I/Q inversion on TX, and nodes do the
// same on RX. This ensures that gateways can talk to nodes and vice
// versa, but gateways will not hear other gateways and nodes will not
// hear other nodes. By uncommenting this macro, this inversion is
// disabled and this node can hear other nodes. If two nodes both have
// this macro set, they can talk to each other (but they can no longer
// hear gateways). This should probably only be used when debugging
// and/or when talking to the radio directly (e.g. like in the "raw"
// example).
//#define DISABLE_INVERT_IQ_ON_RX

#define CFG_noassert

#endif // _lmic_config_h_


bout what these options mean in the Blender wiki. Here's a screenshot of what worked for us in Blender 2.60:

Figure 5: The Blender "Export OBJ" dialog box.

If everything goes well, you should now have an .obj file and an .mtl file to go with all the image files that make up your textures.

Shade

Shade is a 3D modelling, rendering, and animation tool available from E Frontier, a Japanese software company: it is easy to use and has more powerful features available like complex animations. It also handles a large variety of formats, including Collada .dae and Wavefront .obj, and also direct imports from Google SketchUp (using the .skp format). Shade also offers photo modelling, the ability to generate a 3D model from 2D images and apply textures extracted from those images. Shade has three versions: Basic (US$99), Standard (US$ 349), and Pro (US$749), and you can get a 30 day trial version of the Basic and Pro versions (Shade version comparison). All three versions (and both trials) support SketchUp import and .obj export.

You can find Shade documentation, tutorials and manuals in ShadeCamp, the information portal for Shade.

To create an .obj version of a model in Shade, open it up, then select File > Export > Wavefront OBJ (see Figure 6). Choose the following options:

Max vertices per face: 4-sided

Normals (Smoothing)

UV Value

Invert V Value

Material file

Create texture folder

OS (choose your OS)

Figure 6: The Shade "Export" dialog box.

As you can see, Shade offers the possibility of exporting materials by creating a texture folder so the images for the textures are exported automatically. Here, we've selected to export all objects as Output, but you can choose to export only selected items if that's what you want. All the other choices are necessary for compatibility with the next steps of the process of rendering them in WebGL.

Rendering .obj files in WebGL

In order to render the model in WebGL we can use Three.js. Three.js is a JavaScript library that provides a JavaScript wrapper for WebGL. Three.js doesn't directly handle .obj files — first you have to convert them to JSON —  but luckily Three.js also provides a script that does this for you.

Converting .obj to JSON

Files can be converted from .obj to the JSON format expected by Three.js using convert_obj_three.py, written by AlteredQualia. The script includes detailed instructions on how


i),%xmm1
	pand	%xmm6,%xmm9
	movdqu	64-128(%rdi),%xmm2
	pand	%xmm6,%xmm10
	movdqu	96-128(%rdi),%xmm5
	pand	%xmm6,%xmm11
	paddd	%xmm0,%xmm8
	movdqu	128-128(%rdi),%xmm0
	pand	%xmm6,%xmm12
	paddd	%xmm1,%xmm9
	movdqu	160-128(%rdi),%xmm1
	pand	%xmm6,%xmm13
	paddd	%xmm2,%xmm10
	movdqu	192-128(%rdi),%xmm2
	pand	%xmm6,%xmm14
	paddd	%xmm5,%xmm11
	movdqu	224-128(%rdi),%xmm5
	pand	%xmm6,%xmm15
	paddd	%xmm0,%xmm12
	paddd	%xmm1,%xmm13
	movdqu	%xmm8,0-128(%rdi)
	paddd	%xmm2,%xmm14
	movdqu	%xmm9,32-128(%rdi)
	paddd	%xmm5,%xmm15
	movdqu	%xmm10,64-128(%rdi)
	movdqu	%xmm11,96-128(%rdi)
	movdqu	%xmm12,128-128(%rdi)
	movdqu	%xmm13,160-128(%rdi)
	movdqu	%xmm14,192-128(%rdi)
	movdqu	%xmm15,224-128(%rdi)

	movdqa	%xmm7,(%rbx)
	movdqa	.Lpbswap(%rip),%xmm6
	decl	%edx
	jnz	.Loop

	movl	280(%rsp),%edx
	leaq	16(%rdi),%rdi
	leaq	64(%rsi),%rsi
	decl	%edx
	jnz	.Loop_grande

.Ldone:
	movq	272(%rsp),%rax
	movq	-16(%rax),%rbp
	movq	-8(%rax),%rbx
	leaq	(%rax),%rsp
	.byte	0xf3,0xc3
.size	sha256_multi_block,.-sha256_multi_block
.align	256
K256:
.long	1116352408,1116352408,1116352408,1116352408
.long	1116352408,1116352408,1116352408,1116352408
.long	1899447441,1899447441,1899447441,1899447441
.long	1899447441,1899447441,1899447441,1899447441
.long	3049323471,3049323471,3049323471,3049323471
.long	3049323471,3049323471,3049323471,3049323471
.long	3921009573,3921009573,3921009573,3921009573
.long	3921009573,3921009573,3921009573,3921009573
.long	961987163,961987163,961987163,961987163
.long	961987163,961987163,961987163,961987163
.long	1508970993,1508970993,1508970993,1508970993
.long	1508970993,1508970993,1508970993,1508970993
.long	2453635748,2453635748,2453635748,2453635748
.long	2453635748,2453635748,2453635748,2453635748
.long	2870763221,28


        }
        /// In case of address it is 25 bytes array. In case of mosaic it is 8 byte array(or 2 uint32 array).
        /// In case of transaction it is 2 byte array(ushort)
        #[inline]
        pub fn value(&self) -> Option<&'a [u8]> {
            self._tab
                .get::<fb::ForwardsUOffset<fb::Vector<'a, u8>>>(
                    PropertyModificationBuffer::VT_VALUE,
                    None,
                )
                .map(|v| v.safe_slice())
        }
    }

    pub struct PropertyModificationBufferArgs<'a> {
        pub modification_type: u8,
        pub value: Option<fb::WIPOffset<fb::Vector<'a, u8>>>,
    }

    impl<'a> Default for PropertyModificationBufferArgs<'a> {
        #[inline]
        fn default() -> Self {
            PropertyModificationBufferArgs {
                modification_type: 0,
                value: None,
            }
        }
    }

    pub struct PropertyModificationBufferBuilder<'a: 'b, 'b> {
        fbb_: &'b mut fb::FlatBufferBuilder<'a>,
        start_: fb::WIPOffset<fb::TableUnfinishedWIPOffset>,
    }

    impl<'a: 'b, 'b> PropertyModificationBufferBuilder<'a, 'b> {
        #[inline]
        pub fn add_modification_type(&mut self, modification_type: u8) {
            self.fbb_.push_slot::<u8>(
                PropertyModificationBuffer::VT_MODIFICATIONTYPE,
                modification_type,
                0,
            );
        }
        #[inline]
        pub fn add_value(&mut self, value: fb::WIPOffset<fb::Vector<'b, u8>>) {
            self.fbb_
                .push_slot_always::<fb::WIPOffset<_>>(PropertyModificationBuffer::VT_VALUE, value);
        }
        #[inline]
        pub fn new(
            _fbb: &'b mut fb::FlatBufferBuilder<'a>,
        ) -> PropertyModificationBufferBuilder<'a, 'b> {
            let start = _fbb.start_table();
            PropertyModificationBufferBuilder {
                fbb_: _fbb,
                start_: start,
            }
        }
        #[inline]
        pub fn finish(self) -> fb::WIPOffset<PropertyModificationBuffer<'a>> {
            let o = self.fbb_.end_table(self.start_);
            fb::WIPOffset::new(o.value())
        }
    }

    #[derive(Copy, Clone, Debug, PartialEq)]
    pub struct AccountPropertiesTransactionBuffer<'a> {
        pub _tab: fb::Table<'a>,
    }

    impl<'a> fb::Follow<'a> for AccountPropertiesTransactionBuffer<'a> {
        type Inner = AccountPropertiesTransactionBuffer<'a>;
        #[inline]
        fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
            Self {
                _tab: fb::Table { buf, loc },
            }
        }
    }

    impl<'a> AccountPropertiesTransactionBuffer<'a> {
        #[inline]
        pub fn init_from_table(table: fb::Table<'a>) -> Self {
            AccountPropertiesTransactionBuffer { _tab: table }
        }
        #[allow(unused_mut)]
        pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr>(
            _fbb: &'mut_bldr mut fb::FlatBufferBuilder<'bldr>,
            args: &'args AccountPropertiesTransactionBufferArgs<'args>,
        ) -> fb::WIPOffset<AccountPropertiesTransactionBuffer<'bldr>> {
            let mut builder = AccountPropertiesTransactionBufferBuilder::new(_fbb);
            if let Some(x) = args.modifications {
                builder.add_modifications(x);
            }
            if let Some(x) = args.deadline {
                buil


 {
		byte[] content = cw.toByteArray();
        dupmer.dump(name, content);
		return cl.load(name, content);
	}

	private Class tryClass(String name) {
		try {
			return cl.load(name);
		} catch (Exception e) {
			return null;
		}
	}

	private static final Type methodFactoryType = Type.getType(MethodFactory.class);
	private static final XRubyClassLoader cl = new XRubyClassLoader();
	private static ClassDumper dupmer = new ClassDumper();
	private static final Type OBJECT_TYPE = Type.getType(Object.class);

	private Class klass;
	private ClassWriter cw;
	private ClassVisitor cv;

	RubyTypeFactory(Class klass) {
		this.klass = klass;
		this.cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
		this.cv = new CheckClassAdapter(cw);
	}

	protected abstract Class getTypeAnnotationClass();
	protected abstract String getBuilderName(Class klass);
	protected abstract Type getInterface();
	protected abstract Method getBuilderMethod();
	protected abstract int createRubyType(GeneratorAdapter mg, Annotation annotation);
	protected abstract boolean isModule();

	private void startBuilder(String name) {
		this.cv.visit(CgConfig.TARGET_VERSION, Opcodes.ACC_PUBLIC, name,
				null, OBJECT_TYPE.getInternalName(), new String[] { getInterface().getInternalName()});

		CgUtil.createImplicitConstructor(this.cv, OBJECT_TYPE);
	}

	private GeneratorAdapter startBuilderMethod() {
		GeneratorAdapter mg = new GeneratorAdapter(Opcodes.ACC_PUBLIC,
                getBuilderMethod(), null, null, this.cv);
		mg.visitCode();
		return mg;
	}

	private void endClassBuilder() {
		cv.visitEnd();
	}

	private void createBuilderMethod(Annotation annotation) {
		GeneratorAdapter mg = startBuilderMethod();
		int rubyTypeIdx = createRubyType(mg, annotation);
		generateMethod(mg, rubyTypeIdx);
		generateConstant(mg, rubyTypeIdx);

		mg.loadLocal(rubyTypeIdx);
        mg.returnValue();
        mg.endMethod();
	}

	private void generateConstant(GeneratorAdapter mg, int rubyTypeIdx) {
		for (Field field : klass.getFields()) {
			int modifier = field.getModifiers();
			if (!(Modifier.isStatic(modifier) || Modifier.isPublic(modifier))) {
				continue;
			}

			Annotation rawFieldAnnotation = field.getAnnotation(RubyLevelConstant.class);
			if (rawFieldAnnotation == null) {
				continue;
			}

			defineRubyConstant(mg, field, (RubyLevelConstant)rawFieldAnnotation, rubyTypeIdx);
		}
	}

	private void defineRubyConstant(GeneratorAdapter mg, Field field,
			RubyLevelConstant constant, int rubyTypeIdx) {
		mg.loadLocal(rubyTypeIdx);
		mg.push(constant.name());
		mg.getStatic(Type.getType(this.klass), field.getName(), Type.getType(field.getType()));
		mg.invokeVirtual(Types.RUBY_MODULE_TYPE,
				CgUtil.getMethod("setConstant", Types.RUBY_VALUE_TYPE, Type.getType(String.class), Types.RUBY_VALUE_TYPE));
	}

	private void generateMethod(GeneratorAdapter mg, int rubyTypeIdx) {
		int factoryIdx = createLocalMethodFactory(mg);

		Map<String, CgMethodItem> methodMap = new HashMap<String, CgMethodItem> ();
		CgMethodItem allocItem = null;

		for (java.lang.reflect.Method method : klass.getMethods()) {
			if (method.getDeclaringClass() != klass) {
				continue;
			}

			Annotation rawMethodAnnotation = method.getAnnotation(RubyLevelMethod.class);
			if (rawMethodAnnotation != null) {
				CgMethodItem newItem = cr


;padding-bottom:20px}.infoCard--padded:last-child{padding-bottom:40px}.infoCard-info{float:left;width:60%;margin-left:25px}.infoCard-avatar{float:left;height:60px;width:60px}.infoCard-info .button--primary,.infoCard-info .link--primary{font-size:18px}.infoCard-title{text-transform:uppercase;letter-spacing:.1em}.infoCard-actions,.infoCard-info--short{display:block;height:60px}.infoCard-actions>.button>.label.is-default{color:rgba(0,0,0,.68)}.infoCard-actions>.button,.infoCard-info--short .infoCard-wrapper{position:relative;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.infoCard.is-hidden .infoCard-avatar,.infoCard.is-hidden .infoCard-wrapper{opacity:.3}.promoCard{width:290px;border:1px solid rgba(0,0,0,.15);-webkit-border-radius:5px;border-radius:5px;-webkit-box-shadow:0 0 4px #f0f0f0;box-shadow:0 0 4px #f0f0f0}.promoCard .button--close{font-size:26px;padding:15px 20px 0 0}.promoCard .button--follow{margin-left:10px}.promoCard .avatar-text{font-size:16px}.readNextPromo{padding:0 0;width:290px;height:85px;-webkit-border-radius:3px;border-radius:3px;background:#fff;color:rgba(0,0,0,.84);border:1px solid rgba(0,0,0,.15);-webkit-box-shadow:0 0 4px #f0f0f0;box-shadow:0 0 4px #f0f0f0}.readNextPromo--chromeless{-webkit-box-shadow:none;box-shadow:none;width:255px;-webkit-border-radius:0;border-radius:0;border:0}.readNextPromo-postInfo{padding:2px 15px;width:100%;max-width:260px}.readNextPromo--chromeless .readNextPromo-postInfo{padding:0 5px 2px 10px}.readNextPromo-callToAction{color:#03a87c;font-size:15px}.readNextPromo-postTitle{color:rgba(0,0,0,.84);font-size:18px;margin-top:-5px;line-height:1.2}@media (max-width:767px){.infoCard-actions{display:block;width:100%;margin-left:0;margin-top:10px}.infoCard-info{margin-left:15px}}.tags{font-size:15px;font-family:medium-content-sans-serif-font,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Open Sans","Helvetica Neue",sans-serif;letter-spacing:0;font-weight:400;font-style:normal}.tags .tag-token,.tags>a,.tags>li{display:inline-block;margin-right:5px;margin-bottom:5px;position:relative}.tags .button--close{line-height:inherit}.tags .tag-button,.tags>a,.tags>li{color:#fff;-webkit-border-radius:999em;border-radius:999em;padding:0 9px;line-height:1.4}.tags .tag-button{-webkit-border-radius:4px;border-radius:4px}.tags .tag-button:focus,.tags a:focus{background:#03a87c;outline:0}.tags-input{display:inline-block;white-space:nowrap;min-width:5px;outline:0;-webkit-border-radius:4px;border-radius:4px;padding:3px 9px;margin-bottom:5px;cursor:text}.sectionTagEditor .tags>.tag-token:nth-child(1)+.tags-input,.tags--navigation>.tag-token:nth-child(1)+.tags-input{display:none}.tags--postTa


on ALL
     */
    public JComponent $$$getRootComponent$$$() {
        return contentPane;
    }

}
/*
 * Licensed to the Apache Software Foundation (ASF) under one
 *  or more contributor license agreements.  See the NOTICE file
 *  distributed with this work for additional information
 *  regarding copyright ownership.  The ASF licenses this file
 *  to you under the Apache License, Version 2.0 (the
 *  "License"); you may not use this file except in compliance
 *  with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing,
 *  software distributed under the License is distributed on an
 *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 *  KIND, either express or implied.  See the License for the
 *  specific language governing permissions and limitations
 *  under the License.
 */

package com.github.rodionmoiseev.c10n;

import com.github.rodionmoiseev.c10n.test.utils.RuleUtils;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TestRule;

import java.util.Locale;

import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;

public class CustomImplementationBindingTest {
    @Rule
    public TestRule tmpLocale = RuleUtils.tmpLocale();
    @Rule
    public TestRule tmpC10N = RuleUtils.tmpC10NConfiguration();

    @Test
    public void localeBinding() {
        C10N.configure(new C10NConfigBase() {
            @Override
            protected void configure() {
                bind(Labels.class)
                        .to(LabelsEng.class, Locale.ENGLISH)
                        .to(LabelsJapanese.class, Locale.JAPANESE);
            }
        });
        Locale.setDefault(Locale.ENGLISH);
        Labels msg = C10N.get(Labels.class);
        assertThat(msg.label(), is(equalTo("English")));

        Locale.setDefault(Locale.JAPANESE);
        assertThat(msg.label(), is(equalTo("Japanese")));
    }

    @Test
    public void metricSystem() {
        C10N.configure(new C10NConfigBase() {
            @Override
            protected void configure() {
                bind(Units.class).to(ImperialUnits.class, Locale.UK);
            }
        });

        Units msg = C10N.get(Units.class);

        Locale.setDefault(Locale.JAPANESE);
        assertThat(msg.distance(0.91f), is("0.91 meters"));
        Locale.setDefault(Locale.UK);
        assertThat(msg.distance(0.91f), is("1.0 yards"));
    }

    @Test
    public void metricSystemFallBackToImplementation() {
        C10N.configure(new C10NConfigBase() {
            @Override
            protected void configure() {
                bind(Units.class)
                        .to(ImperialUnits.class, Locale.UK)
                        .to(MetricUnits.class);
            }
        });

        Units msg = C10N.get(Units.class);
        Locale.setDefault(Locale.JAPANESE);
        assertThat(msg.distance2(0.91f), is("0.91 meters"));
        Locale.setDefault(Locale.UK);
        assertThat(msg.distance2(0.91f), is("1.0 yards"));
    }

    @Test
    public void customImplementationBindingsInChildConfigs() {
        C10N.configure(new C10NConfigBase() {
            @Override
            protected void configure() {
                install(new C10NConfigBase() {
                    @Override


:auto;padding:0}.navbar .brand{padding-right:10px;padding-left:10px;margin:0 0 0 -5px}.nav-collapse{clear:both}.nav-collapse .nav{float:none;margin:0 0 10px}.nav-collapse .nav>li{float:none}.nav-collapse .nav>li>a{margin-bottom:2px}.nav-collapse .nav>.divider-vertical{display:none}.nav-collapse .nav .nav-header{color:#777;text-shadow:none}.nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-collapse .dropdown-menu li+li a{margin-bottom:2px}.nav-collapse .nav>li>a:hover,.nav-collapse .nav>li>a:focus,.nav-collapse .dropdown-menu a:hover,.nav-collapse .dropdown-menu a:focus{background-color:#f2f2f2}.navbar-inverse .nav-collapse .nav>li>a,.navbar-inverse .nav-collapse .dropdown-menu a{color:#999}.navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .nav>li>a:focus,.navbar-inverse .nav-collapse .dropdown-menu a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:focus{background-color:#111}.nav-collapse.in .btn-group{padding:0;margin-top:5px}.nav-collapse .dropdown-menu{position:static;top:auto;left:auto;display:none;float:none;max-width:none;padding:0;margin:0 15px;background-color:transparent;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav-collapse .open>.dropdown-menu{display:block}.nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none}.nav-collapse .dropdown-menu .divider{display:none}.nav-collapse .nav>li>.dropdown-menu:before,.nav-collapse .nav>li>.dropdown-menu:after{display:none}.nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}.navbar-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111;border-bottom-color:#111}.navbar .nav-collapse .nav.pull-right{float:none;margin-left:0}.nav-collapse,.nav-collapse.collapse{height:0;overflow:hidden}.navbar .btn-navbar{display:block}.navbar-static .navbar-inner{padding-right:10px;padding-left:10px}}@media(min-width:980px){.nav-collapse.collapse{height:auto!important;overflow:visible!important}}
/* CSS for slidemenu
 * Copyright © 2016, Chris


的插件命令", NO_SHORTCUT, 100,
                         HELPCTX(ssh_auth_plugin),
                         conf_editbox_handler, I(CONF_auth_plugin), ED_STR);
#ifndef NO_GSSAPI
            /*
             * Connection/SSH/Auth/GSSAPI, which sadly won't fit on
             * the main Auth panel.
             */
            ctrl_settitle(b, "连接/SSH/认证/GSSAPI",
                          "GSSAPI 身份认证设置");
            s = ctrl_getset(b, "连接/SSH/认证/GSSAPI", "gssapi", NULL);

            ctrl_checkbox(s, "尝试GSSAPI身份验证(仅SSH-2)",
                          't', HELPCTX(ssh_gssapi),
                          conf_checkbox_handler,
                          I(CONF_try_gssapi_auth));

            ctrl_checkbox(s, "尝试GSSAPI密钥交换(仅SSH-2)",
                          'k', HELPCTX(ssh_gssapi),
                          conf_checkbox_handler,
                          I(CONF_try_gssapi_kex));

            ctrl_checkbox(s, "允许GSSAPI凭证委托", 'l',
                          HELPCTX(ssh_gssapi_delegation),
                          conf_checkbox_handler,
                          I(CONF_gssapifwd));

            /*
             * GSSAPI library selection.
             */
            if (ngsslibs > 1) {
                c = ctrl_draglist(s, "GSSAPI库的优先顺序：",
                                  'p', HELPCTX(ssh_gssapi_libraries),
                                  gsslist_handler, P(NULL));
                c->listbox.height = ngsslibs;

                /*
                 * I currently assume that if more than one GSS
                 * library option is available, then one of them is
                 * 'user-supplied' and so we should present the
                 * following file selector. This is at least half-
                 * reasonable, because if we're using statically
                 * linked GSSAPI then there will only be one option
                 * and no way to load from a user-supplied library,
                 * whereas if we're using dynamic libraries then
                 * there will almost certainly be some default
                 * option in addition to a user-supplied path. If
                 * anyone ever ports PuTTY to a system on which
                 * dynamic-library GSSAPI is available but there is
                 * absolutely no consensus on where to keep the
                 * libraries, there'll need to be a flag alongside
                 * ngsslibs to control whether the file selector is
                 * displayed.
                 */

                ctrl_filesel(s, "用户提供的GSSAPI库路径：", 's',
                             FILTER_DYNLIB_FILES, false, "选择库文件",
                             HELPCTX(ssh_gssapi_libraries),
                             conf_filesel_handler,
                             I(CONF_ssh_gss_custom));
            }
#endif
        }

        if (!midsession) {
            /*
             * The Connection/SSH/TTY panel.
             */
            ctrl_settitle(b, "连接/SSH/TTY", "远程终端设置");

            s = ctrl_getset(b, "连接/SSH/TTY", "sshtty", NULL);
            ctrl_checkbox(s, "不分配伪终端", 'p',
                          HELPCTX(ssh_nopty),
                          conf_checkbox_handler,
                          I(CONF_nopty));

            s = ctrl_getset(b, "连接/SSH/TTY", "ttymodes",
                            "终端模式：");
            td = (struct ttymodes_data *)
                ctrl_alloc(b, sizeof(struct ttymodes_data));
            ctrl_text(s, "发送终端模式", HELPCTX(ssh_ttymodes));
            td->listbox = ctrl_listbox(s, NULL, NO_SHORTCUT,
                                       HELPCTX(ssh_ttymodes),
                                       ttymodes_handler, P(td));
            td->listbox->listbox.height = 8;
            td->listbox->listbox.ncols = 2;
            td->listbox->listbox.percentages = snewn(2, int);
            td->listbox->listbox.percentages[0] = 40;
            td->listbox->listbox.percentages[1] = 60;
            ctrl_columns(s, 2, 75, 25);
            c = ctrl_text(s, "对于选定的模式,发送：", HELPCTX(ssh_ttymodes));
            c->column = 0;
            td->setbutton = ctrl_pushbutton(s, "设置", 's',
                                            HELPCTX(ssh_ttymodes),
                                            ttymodes_handler, P(td));
            td->setbutton->column = 1;
            td->setbutton->delay_taborder = true;
            ctrl_columns(s, 1, 100);        /* column break */
            /* Bit of a hack to get the value radio buttons and
             * edit-box on the same row. */


#include "gridstore.h"
#include <stdlib.h>
#include <stdio.h>

void main(int argc, char *argv[]){

	GSGridStore *store = NULL;
	GSContainer *container;
	GSCollection *collection;
	GSContainerInfo info = GS_CONTAINER_INFO_INITIALIZER;
	GSColumnInfo columnInfo = GS_COLUMN_INFO_INITIALIZER;
	GSColumnInfo columnInfoList[3];
	GSRow *row;
	GSResult ret;
	size_t stackSize;
	GSResult errorCode;
	GSChar errMsgBuf1[1024], errMsgBuf2[1024];	// エラーメッセージを格納するバッファ
	int i;

	//===============================================
	// クラスタに接続する
	//===============================================
	// 接続情報を指定する (マルチキャスト方式)
	const GSPropertyEntry props[] = {
		{ "notificationAddress", "239.0.0.1" },
		{ "notificationPort", "31999" },
		{ "clusterName", "myCluster" },
		{ "database", "public" },
		{ "user", "admin" },
		{ "password", "admin" },
		{ "applicationName", "SampleC" }
	};

	/*
	// 接続情報を指定する (固定リスト方式)
	const GSPropertyEntry props[] = {
		{ "notificationMember", "192.168.10.110:10001" },
		{ "clusterName", "myCluster" },
		{ "database", "public" },
		{ "user", "admin" },
		{ "password", "admin" },
		{ "applicationName", "SampleC" }
	};
	*/
	const size_t propCount = sizeof(props) / sizeof(*props);

	// GridStoreインスタンスを取得する
	ret = gsGetGridStore(gsGetDefaultFactory(), props, propCount, &store);
	if ( !GS_SUCCEEDED(ret) ){
		fprintf(stderr, "ERROR gsGetGridStore\n");
		goto LABEL_ERROR;
	}
	// コンテナ作成や取得などの操作を行うと、クラスタに接続される
	ret = gsGetContainerGeneral(store, "containerName", &container);
	if ( !GS_SUCCEEDED(ret) ){
		fprintf(stderr, "ERROR gsGetContainerGeneral\n");
		goto LABEL_ERROR;
	}
	gsCloseContainer(&container, GS_TRUE);
	printf("Connect to Cluster\n");

	//===============================================
	// コレクションを作成する
	//===============================================
	// (1)コンテナ種別を設定する
	info.type = GS_CONTAINER_COLLECTION;

	// (2)ロウキーありの場合は設定する
	info.rowKeyAssigned = GS_TRUE;

	// (3)カラム情報を定義する
	columnInfo.name = "id";
	columnInfo.type = GS_TYPE_INTEGER;
	columnInfoList[0] = columnInfo;

	columnInfo.name = "string_array";
	columnInfo.type = GS_TYPE_STRING_ARRAY;
	columnInfoList[1] = columnInfo;

	columnInfo.name = "integer_array";
	columnInfo.type = GS_TYPE_INTEGER_ARRAY;
	columnInfoList[2] = columnInfo;

	// (4)カラム情報をコンテナ情報オブジェクトに設定する
	info.columnCount = sizeof(columnInfoList) / sizeof(*columnInfoList);
	info.columnInfoList = columnInfoList;

	// (5)コレクションを作成する
	ret = gsPutCollectionGeneral(store, "SampleC_ArrayData", &info, GS_FALSE, &collection);
	if ( !GS_SUCCEEDED(ret) ){
		fprintf(stderr, "ERROR gsPutCollectionGeneral\n");
		goto LABEL_ERROR;
	}

	fprintf(stdout, "Create Collection name=SampleC_ArrayData\n");

	//===============================================
	// 配列型のデータを登録する
	//===============================================
	{
		// (1)配列型のデータ
		const GSChar *stringArray[4] = { "Sales", "Development", "Marketing", "Research" };
		const int32_t integerArray[4] = { 39, 92, 18, 51 };

		// (2)空のロウオブジェクトの作成
		ret = gsCreateRowByContainer(collection, &row);
		if ( !GS_SUCCEEDED(ret) ){
			fprintf(stderr, "ERROR gsCreateRowByContainer\n");
			goto LABEL_ERROR;
		}

		// (3)カラム値をセット
		gsSetRowFieldByInteger(row, 0, 0);
		gsSetRowFieldByStringArray(row, 1, stringArray, 4);
		gsSetRowFieldByIntegerArray(row, 2, integerArray, 4);

		// (4)ロウを登録する
		ret = gsPutRow(collection, NULL, row, NULL);
		if ( !GS_SUCCEEDED(ret) ){
			fprintf(stderr, "ERROR gsPutRow\n");
			goto LABEL_ERROR;
		}

		gsCloseRow(&row);

		printf("Put Row (Array)\n");
	}

	//===============================================
	// 配列型のデータを取得する
	//===============================================
	{
		int32_t id;
		const GSChar * const * stringArray;
		const int32_t * integerArray;
		size_t stringCount;
		size_t integerCount;

		// (1)空のロウオブジェクトの作成
		gsCreateRowByContainer(collection, &row);

		// (2)ロウキーを指定してロウ取得
		ret = gsGetRowByInteger(collection, 0, row, GS_FALSE, NULL);
		if ( !GS_SUCCEEDED(ret) ){
			fprintf(stderr, "ERROR gsGetRowByInteger\n");
			goto LABEL_ERROR;
		}

		// (3)ロウから配列型データを取得
		gsGetRowFieldAsInteger(row, 0, &id);
		gsGetRowFieldAsStringArray(row, 1, &stringArray, &stringCount);
		gsGetRowFieldAsIntegerArray(row, 2, &integerArray, &integerCount);

		printf("Get Row (id=%d,", id);

		printf("[");
		for( i = 0; i < stringCount; i++ ){
			if ( i != 0 ) printf(", ");
			printf("%s", *stringArray);
			stringArray++;
		}
		printf("],[");

		for( i = 0; i < integerCount; i++ ){
			if ( i != 0 ) printf(", ");
			printf("%d", *integerAr


, THREAD_REG20];
	sw	r21, [\reg, THREAD_REG21];
	sw	r29, [\reg, THREAD_REG29];
	sw	r2, [\reg, THREAD_REG2];
	sw	r0, [\reg, THREAD_REG0]
.endm

.macro	restore_context	reg
	lw	r12, [\reg, THREAD_REG12];
	lw	r13, [\reg, THREAD_REG13];
	lw	r14, [\reg, THREAD_REG14];
	lw	r15, [\reg, THREAD_REG15];
	lw	r16, [\reg, THREAD_REG16];
	lw	r17, [\reg, THREAD_REG17];
	lw	r18, [\reg, THREAD_REG18];
	lw	r19, [\reg, THREAD_REG19];
	lw	r20, [\reg, THREAD_REG20];
	lw	r21, [\reg, THREAD_REG21];
	lw	r29, [\reg, THREAD_REG29];
	lw	r0, [\reg, THREAD_REG0];
	lw	r2, [\reg, THREAD_REG2];
	lw	r3, [\reg, THREAD_REG3]
.endm

/*
 * task_struct *resume(task_struct *prev, task_struct *next,
 *			struct thread_info *next_ti)
 */
ENTRY(resume)
	mfcr	r9, cr0
	nop
	nop
	sw	r9, [r4, THREAD_PSR]
	save_context	r4
	sw	r3, [r4, THREAD_REG3]

	mv	r28, r6
	restore_context	r5
	mv	r8, r6
	addi	r8, KERNEL_STACK_SIZE
	subi	r8, 32
	la 	r9, kernelsp;
	sw 	r8, [r9];

	mfcr	r9, cr0
	ldis	r7, 0x00ff
	nop
	and	r9, r9, r7
	lw	r6, [r5, THREAD_PSR]
	not	r7, r7
	and	r6, r6, r7
	or	r6, r6, r9
	mtcr	r6, cr0
	nop; nop; nop; nop; nop
	br	r3

ENTRY(handle_sys)
	SAVE_ALL
	sw	r8, [r0, 16]		# argument 5 from user r8
	sw	r9, [r0, 20]		# argument 6 from user r9
	enable_irq

	sw	r4, [r0, PT_ORIG_R4]	#for restart syscall
	sw	r7, [r0, PT_ORIG_R7]	#for restart syscall
	sw	r27, [r0, PT_IS_SYSCALL] # it from syscall

	lw	r9, [r0, PT_EPC]	# skip syscall on return
	addi	r9, 4
	sw	r9, [r0, PT_EPC]

	cmpi.c	r27, __NR_syscalls 	# check syscall number
	bcs	illegal_syscall

	slli	r8, r27, 2		# get syscall routine
	la	r11, sys_call_table
	add	r11, r11, r8
	lw	r10, [r11]		# get syscall entry

	cmpz.c	r10
	beq	illegal_syscall

	lw	r8, [r28, TI_FLAGS]
	li	r9, _TIF_SYSCALL_TRACE
	and.c	r8, r8, r9
	bne	syscall_trace_entry

	brl	r10			# Do The Real system call

	cmpi.c	r4, 0
	blt	1f
	ldi	r8, 0
	sw	r8, [r0, PT_R7]
	b 2f
1:
	cmpi.c	r4, -MAX_ERRNO - 1
	ble	2f


c700-a403-11e8-968d-a38dd0ab4401.png">

[Andrew Ng, Sequential Models Course, Deep Learning Specialization]

### RNN Forward Pass

[Andrew Ng, Sequential Models Course, Deep Learning Specialization]

### RNN Backward Pass

[Andrew Ng, Sequential Models Course, Deep Learning Specialization]

### RNN Problem
- In theory, RNNs are absolutely capable of handling such “long-term dependencies.”
- In practice, RNNs don’t seem to be able to learn them.
- The problem was explored in depth by Hochreiter (1991) [German] and Bengio, et al. (1994) with [LSTM](https://www.bioinf.jku.at/publications/older/2604.pdf)

## What is LSTM?

- It is a special type of RNN, capable of learning long-term dependencies.

- "Long short-term memory (LSTM) units are units of a recurrent neural network (RNN). An RNN composed of LSTM units is often called an LSTM network. A common LSTM unit is composed of a cell, an input gate, an output gate and a forget gate. The cell remembers values over arbitrary time intervals and the three gates regulate the flow of information into and out of the cell"

- Long Short Term Memory (LSTM) is a type of deep learning model that is mostly used for analysis of sequential data (time series data prediction).

- There are different application areas that are used: Language model, Neural machine translation, Music generation, Time series prediction, Financial prediction, Robot control, Time series prediction, Speech recognition, Rhythm learning, Music composition, Grammar learning, Handwriting recognition, Human action recognition, Sign Language Translation,Time series anomaly detection, Several prediction tasks in the area of business process management, Prediction in medical care pathways, Semantic parsing, Object Co-segmentation.

- LSTM was proposed in 1997 by Sepp Hochreiter and Jürgen Schmidhuber and improved in 2000 by Felix Gers' team.
[Paper](https://www.bioinf.jku.at/publications/older/2604.pdf)

Code: https://github.com/omerbsezer/LSTM_RNN_Tutorials_with_Demo/tree/master/BasicLSTM

### LSTM Cell

[Andrew Ng, Sequential Models Course, Deep Learning Specialization]

### LSTM Forward Pass

[Andrew Ng, Sequential Models Course, Deep Learning Specialization]

## SAMPLE LSTM CODE: Prediction of Stock Prices Using LSTM network
Stock and ETFs prices are predicted using LSTM network (Keras-Tensorflow).

Code: https://github.com/omerbsezer/LSTM_RNN_Tutorials_with_Demo/tree/master/StockPricesPredictionProject

- Stock prices are downloaded from [finance


Shape getCannonShape() {
		return CannonCastShape.AUTOCANNON_BREECH;
	}

	@Override public boolean canConnectToSide(BlockState state, Direction face) { return this.getFacing(state) == face; }

	@Override
	public BlockState getStateForPlacement(BlockPlaceContext context) {
		return this.defaultBlockState().setValue(FACING, context.getNearestLookingDirection());
	}

	@Override
	public boolean isBreechMechanism(BlockState state) {
		return true;
	}

	@Override
	public boolean isComplete(BlockState state) {
		return true;
	}

	@Override
	public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) {
		return AllShapes.EIGHT_VOXEL_POLE.get(this.getFacing(state).getAxis());
	}

	@Override
	public InteractionResult onWrenched(BlockState state, UseOnContext context) {
		Level level = context.getLevel();
		if (level.isClientSide) return InteractionResult.SUCCESS;
		BlockPos pos = context.getClickedPos();
		AutocannonBlockEntity autocannon = this.getBlockEntity(level, pos);
		Direction facing = this.getFacing(state);

		BlockState newState = state.cycle(HANDLE);
		level.setBlock(pos, newState, 3);
		AbstractAutocannonBreechBlockEntity autocannon1 = this.getBlockEntity(level, pos);
		if (autocannon1 != null) {
			boolean previouslyConnected = autocannon.cannonBehavior().isConnectedTo(facing);
			autocannon1.cannonBehavior().setConnectedFace(facing, previouslyConnected);
			if (level.getBlockEntity(pos.relative(facing)) instanceof AutocannonBlockEntity autocannon2) {
				autocannon2.cannonBehavior().setConnectedFace(facing.getOpposite(), previouslyConnected);
			}

			if (!newState.getValue(HANDLE)) {
				DyeColor seat = autocannon1.getSeatColor();
				if (seat != null) {
					ItemStack drop = AllBlocks.SEATS.get(seat).asStack();
					Player player = context.getPlayer();
					if (!player.addItem(drop) && !player.isCreative()) {
						Vec3 spawnLoc = Vec3.atCenterOf(pos);
						ItemEntity dropEntity = new ItemEntity(level, spawnLoc.x, spawnLoc.y, spawnLoc.z, drop);
						level.addFreshEntity(dropEntity);
						dropEntity.setNoPickUpDelay();
						dropEntity.setTarget(player.getUUID());
					}
				}
				autocannon1.setSeatColor(null);
			}
		}
		return InteractionResult.CONSUME;
	}

	@Override
	public InteractionResult onSneakWrenched(BlockState state, UseOnContext context) {
		return InteractionResult.PASS;
	}

	@Override
	public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult result) {
		ItemStack stack = player.getItemInHand(hand);
		if (level.getBlockEntity(pos) instanceof AbstractAutocannonBreechBlockEntity breech) {
			if (breech.getSeatColor() == null
				&& state.getValue(HANDLE)
				&& stack.getItem() instanceof BlockItem blockItem
				&& blockItem.getBlock() instanceof SeatBlock seat) {
				if (!level.isClientSide) {
					breech.setSeatColor(seat.getColor());
					SoundType soundType = seat.defaultBlockState().getSoundType();
					level.playSound(null, pos, soundType.getPlaceSound(), SoundSource.BLOCKS, (soundType.getVolume() + 1.0F) / 2.0F, soundType.getPitch() * 0.8F);
					if (!player.isCreative()) stack.shrink(1);
				}
				return Inter


,.tl_text_unit::placeholder,.tl_textarea::placeholder{line-height:16px}input[type=search]{padding-right:0}input[type=search]::-webkit-search-cancel-button{margin:7px 4px 0 0}}}@supports (display:-ms-grid){.tl_text,.tl_text_2,.tl_text_3,.tl_text_4,.tl_text_interval,.tl_text_trbl,.tl_text_unit,.tl_textarea{padding:4px 6px 5px}}select{-moz-appearance:none;-webkit-appearance:none;text-transform:none}select::-ms-expand{display:none}select[multiple]{height:auto}.tl_mselect,.tl_select,.tl_select_wrapper{width:100%}.tl_select_unit{width:20%}.tl_select_interval{width:50%}.tl_mselect,.tl_select,.tl_select_interval,.tl_select_unit{background:var(--form-bg) url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjNmE2YTZjIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMS41IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Im02IDkgNiA2IDYtNiIvPjwvc3ZnPg==") right -16px top 3px no-repeat;background-origin:content-box;border:1px solid var(--form-border);border-radius:var(--border-radius);box-sizing:border-box;cursor:pointer;height:30px;margin:3px 0;padding:5px 22px 6px 6px}.tl_mselect[disabled],.tl_mselect[readonly],.tl_select[disabled],.tl_select[readonly],.tl_select_interval[disabled],.tl_select_interval[readonly],.tl_select_unit[disabled],.tl_select_unit[readonly]{background-color:var(--form-bg-disabled);border:1px solid var(--form-border-disabled);color:var(--form-text-disabled);cursor:not-allowed}.tl_mselect[multiple],.tl_select[multiple],.tl_select_interval[multiple],.tl_select_unit[multiple]{background-image:none}@supports (display:-ms-grid){.tl_mselect,.tl_select,.tl_select_interval,.tl_select_unit{padding:5px 18px 5px 2px}}.tl_checkbox{margin:0 1px 0 0}.tl_tree_checkbox{margin:1px 1px 1px 0}.tl_checkbox_single_container{margin:16px 0 0}.tl_checkbox_single_container label{font-weight:600}@media (min-resolution:192dpi){.tl_checkbox_single_container label{font-weight:500}}.checkbox_toggler_first{margin-top:2px}.checkbox_toggler,.checkbox_toggler_first{font-weight:600}@media (min-resolution:192dpi){.checkbox_toggler,.checkbox_toggler_first{font-weight:500}}.checkbox_toggler img,.checkbox_toggler_first img{margin-right:2px;position:relative;top:-1px}.checkbox_options{margin:0 0 3px 21px!important}.tl_checkbox_container .checkbox_options:last-of-type{margin-bottom:0!important}.tl_radio{margin:0 1px 0 0}.tl_tree_radio{margin:1px 1px 1px 0}.tl_radio_table{margin-top:3px}.tl_radio_table td{align-items:center;-moz-column-gap:3px;column-gap:3px;display:inline-flex;padding:0 24px 0 0}.tl_upload_field{margin:1px 0}.tl_submit{back


-group" style=";;">
自机

博丽灵梦 • 雾雨魔理沙 • 东风谷早苗 • 龙子

BOSS

秋穰子 • 黑塚赤实 • 影面 • 锷木幸子 • 射命丸文 • 梅美 • 三珠申田 • 三珠钿目 • 宇贺神稻狐 • 纣真藻

	<img alt="東方催狐譚 ～ Servants of Harvest Wish.封面.png" src="https://upload.thwiki.cc/thumb/2/26/%E6%9D%B1%E6%96%B9%E5%82%AC%E7%8B%90%E8%AD%9A_%EF%BD%9E_Servants_of_Harvest_Wish.%E5%B0%81%E9%9D%A2.png/160px-%E6%9D%B1%E6%96%B9%


(e instanceof te){let i=e,s=e.bbox().center().x,o;t.y>r.y?o=s>i.center.x?0:1:o=s>i.center.x?1:0;let a=t.angleD(i.center),l=r.angleD(i.center);return te.build2(i.center,a,l,i.rx,i.ry,o)}else throw new Error("not supported operation")}updateBbox(){this._bbox=new xe().ext2(this.start).ext2(this.end).build1()}is(e,t){return e===this.polyGrp&&t===this.polyIndex}confidence(e){if(this._confidence_y!=e){let t=this._bbox.height();if(t!==0)if(Math.abs(e-this._bbox.maxY)>5e-4&&Math.abs(e-this._bbox.minY)>5e-4){let r=1-Math.abs(2*e-this._bbox.maxY-this._bbox.minY)/t;this._confidence=r*1e4|0}else this._confidence=0;else this._confidence=1;this._confidence_y=e}return this._confidence}needCountWeight(){return this.outsideWeight+this.insideWeight+this.invalidWeight<5e3}revokeOutside(e){let t=this.confidence(e);return this.outsideWeight-=t,this.invalidWeight+=t,t}revokeInside(e){let t=this.confidence(e);return this.insideWeight-=t,this.invalidWeight+=t,t}setOutside(e){let t=this.confidence(e);return this.outsideWeight+=t,t}setInside(e){let t=this.confidence(e);return this.insideWeight+=t,t}setInvalid(e){let t=this.confidence(e);return this.invalidWeight+=t,t}prevNot0(){let e=this.previous;for(;e!=null&&e!=this;){if(e.weight!=0)return e;e=e.previous}return null}nextNot0(){let e=this.next;for(;e!=null&&e!=this;){if(e.weight!=0)return e;e=e.next}return null}getX(e){if(this.bo!==null)return(this._x_y!=e||isNaN(this._x))&&(vz(this,e)>0?this._x=K[0]:this._x=NaN,this._x_y=e),this._x;throw new Error("not supported operation")}voteStatus(){return this.outsideWeight>this.insideWeight&&this.outsideWeight>this.invalidWeight?2:this.insideWeight>this.outsideWeight&&this.insideWeight>this.invalidWeight?1:this.invalidWeight>this.outsideWeight&&this.invalidWeight>this.insideWeight?3:0}reverse(e){if(e===2)if(this.start.y>this.end.y){let t=Yl.rebuild(this.shape,this.end,this.start),r=new Yl(this.bo,t,this.baseWeight,this.end,this.start,this.polyGrp,this.polyIndex);return nn.addAll(r.connect,this.connect),r}else return this;else if(e===1)if(this.start.y<this.end.y){let t=Yl.rebuild(this.shape,this.end,this.start),r=new Yl(this.bo,t,this.baseWeight,this.end,this.start,this.polyGrp,this.polyIndex);return nn.addAll(r.connect,this.connect),r}else return this;return this}isNeedScan(e){return this.needCountWeight()&&this.confidence(e)>0}hashCode(){return


// Strong boundary conditions for nodal linear momentum

// Symmetric boundary patch
if (symmetricPatchID != -1)
{
    forAll(mesh.boundary()[symmetricPatchID], facei)
    {
        const label& faceID =
            mesh.boundary()[symmetricPatchID].start() + facei;

        forAll(mesh.faces()[faceID], node)
        {
            const label& nodeID = mesh.faces()[faceID][node];

            const tensor& iMnCn_ =
                tensor::I
              - (N.boundaryField()[symmetricPatchID][facei]
               *N.boundaryField()[symmetricPatchID][facei]);

            lmN[nodeID] = iMnCn_ & lmN[nodeID];
        }
    }
}

// SymmetricX boundary patch
if (symmetricXpatchID != -1)
{
    forAll(mesh.boundary()[symmetricXpatchID], facei)
    {
        const label& faceID =
            mesh.boundary()[symmetricXpatchID].start() + facei;

        forAll(mesh.faces()[faceID], node)
        {
            const label& nodeID = mesh.faces()[faceID][node];

            const tensor& iMnCn_ =
                tensor::I
              - (N.boundaryField()[symmetricXpatchID][facei]
               *N.boundaryField()[symmetricXpatchID][facei]);

            lmN[nodeID] = iMnCn_ & lmN[nodeID];
        }
    }
}

// SymmetricY boundary patch
if (symmetricYpatchID != -1)
{
    forAll(mesh.boundary()[symmetricYpatchID], facei)
    {
        const label& faceID =
            mesh.boundary()[symmetricYpatchID].start() + facei;

        forAll(mesh.faces()[faceID], node)
        {
            const label& nodeID = mesh.faces()[faceID][node];

            const tensor& iMnCn_ =
                tensor::I
              - (N.boundaryField()[symmetricYpatchID][facei]
               *N.boundaryField()[symmetricYpatchID][facei]);

            lmN[nodeID] = iMnCn_ & lmN[nodeID];
        }
    }
}

// SymmetricZ boundary patch
if (symmetricZpatchID != -1)
{
    forAll(mesh.boundary()[symmetricZpatchID], facei)
    {
        const label& faceID =
            mesh.boundary()[symmetricZpatchID].start() + facei;

        forAll(mesh.faces()[faceID], node)
        {
            const label& nodeID = mesh.faces()[faceID][node];

            const tensor& iMnCn_ =
                tensor::I
              - (N.boundaryField()[symmetricZpatchID][facei]
               *N.boundaryField()[symmetricZpatchID][facei]);

            lmN[nodeID] = iMnCn_ & lmN[nodeID];
        }
    }
}


ew table `remote_link`
     * - create the new table `track_feature`
     */
    val MIGRATION_3_4 = object : Migration(3, 4) {
        override fun migrate(database: SupportSQLiteDatabase) = with(database) {
            // Create new tables "remote_link" and "track_feature".
            execSQL("CREATE TABLE IF NOT EXISTS `remote_link` (`local_id` INTEGER NOT NULL, `remote_id` TEXT NOT NULL, `sync_date` INTEGER NOT NULL, PRIMARY KEY(`local_id`))")
            execSQL("CREATE TABLE IF NOT EXISTS `track_feature` (`id` TEXT NOT NULL, `key` INTEGER, `mode` INTEGER NOT NULL, `tempo` REAL NOT NULL, `time_signature` INTEGER NOT NULL, `loudness` REAL NOT NULL, `acousticness` REAL NOT NULL, `danceability` REAL NOT NULL, `energy` REAL NOT NULL, `instrumentalness` REAL NOT NULL, `liveness` REAL NOT NULL, `speechiness` REAL NOT NULL, `valence` REAL NOT NULL, PRIMARY KEY(`id`))")
        }
    }

    /**
     * Schema migrations related to playlists.
     * 1. Recreate "playlist" table to enforce non-null primary key.
     * 2. Recreate "playlist_track" table to enforce a foreign key constraint on "playlist_id".
     */
    val MIGRATION_4_5 = object : Migration(4, 5) {
        override fun migrate(database: SupportSQLiteDatabase) = with(database) {
            // Recreate the "playlist" table.
            execSQL("ALTER TABLE `playlist` RENAME TO `playlist_old`")
            execSQL("CREATE TABLE `playlist` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `title` TEXT NOT NULL, `date_created` INTEGER NOT NULL, `icon_uri` TEXT)")
            execSQL("INSERT INTO `playlist` SELECT * FROM `playlist_old` WHERE id IS NOT NULL")
            execSQL("DROP TABLE `playlist_old`")

            // Recreate the "playlist_track" table, copying only tracks whose "playlist_id"
            // matches an "id" in the "playlist" table.
            // Also add index to playlist_id to avoid full table scan when deleting playlists.
            execSQL("ALTER TABLE `playlist_track` RENAME TO `playlist_track_old`")
            execSQL("CREATE TABLE `playlist_track` (`position` INTEGER NOT NULL, `playlist_id` INTEGER NOT NULL, `music_id` INTEGER NOT NULL, PRIMARY KEY(`music_id`, `playlist_id`), FOREIGN KEY(`playlist_id`) REFERENCES `playlist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE)")
            execSQL("CREATE INDEX `index_playlist_track_playlist_id` ON `playlist_track` (`playlist_id`)")
            execSQL("INSERT INTO `playlist_track` SELECT * FROM `playlist_track_old` WHERE playlist_id IN (SELECT id FROM `playlist`)")
            execSQL("DROP TABLE `playlist_track_old`")
        }
    }

    /**
     * Create a new table `track_exclusion`.
     */
    val MIGRATION_5_6 = object : Migration(5, 6) {
        override fun migrate(database: SupportSQLiteDatabase) = with(database) {
            execSQL("CREATE TABLE IF NOT EXISTS `track_exclusion` (`track_id` INTEGER NOT NULL, `exclude_date` INTEGER NOT NULL, PRIMARY KEY(`track_id`))")
        }
    }

    /**
     * Removes tables `remote_link` and `track_feature`.
     */
    val MIGRATION_6_7 = object : Migration(6, 7) {
        override fun migrate(database: SupportSQLiteDatabase) {
            database.execSQL("DROP TABLE IF EXISTS `remote_link`")
            database.execSQL("DROP TABLE IF EXISTS `track_feature`")
        }
    }
}
/*
 * Copyright 2021 Thibault Seisel
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License


ITION
         CMP.L   %A1,%A2        | CHECK TO SEE IF DONE
         BLT.S   WALK3          | CONTINUE

* -2ND TEST-
         MOVE.L  %D3,%A2        | SET A2 TO POINT TO START OF MEMORY
         MOVEQ   #0x00000000,%D0 | CLEAR D0
MTCLR:
         MOVE.W  %D0,(%A2)+     | CLEAR MEMORY
         CMP.L   %A1,%A2        | DONE?
         BNE.S   MTCLR          | NO... ZERO ALL OF MEMORY

         MOVEQ   #-1,%D2        | SET D2 = FFFF
MTSTOR1:
         MOVE.W  -(%A2),%D1     | FIRST READ BACK MEMORY
         CMP.W   %D0,%D1        | CHK AGAINST WHAT WAS WRITTEN
         BNE.S   RAMERR         | STOP ON ERROR
         MOVE.W  %D2,(%A2)      | STORE COMPLEMENT
         CMP.L   %D3,%A2        | DONE?
         BNE.S   MTSTOR1        | NO... COMPLEMENT ALL OF MEMORY
         MOVE.W  %D2,%D0        | D0=WHAT WAS WRITTEN
         NOT.W   %D2            | SAVE COMPLEMENT FOR LATER

MTSTOR0:
         MOVE.W  (%A2),%D1      | READ BACK MEMORY
         CMP.W   %D0,%D1        | CHK AGAINST WHAT WAS WRITTEN
         BNE.S   RAMERR         | STOP ON ERROR
         MOVE.W  %D2,(%A2)+     | STORE COMPLEMENT
         CMP.L   %A1,%A2        | DONE?
         BNE.S   MTSTOR0        | NO...KEEP LOOPING, YES...

RAMERR:  MOVE.L  %D3,%A0        | RESTORE A0
         RTS                    | RETURN

*-------------------------------------------------------------------------
* File TM        TM  Transparent mode                             12/28/81

*    TM  [[EXIT CHAR]TRAILING CHAR]
*
*  In transparent mode the terminal is physically connected to the
*  host; at the same time the terminal is watched by TM software
*  for the EXIT character.  When the exit character is transmitted
*  by the terminal it goes directly to the host; and at the same
*  time the TM software reconfigures the hardware.  If a nonnull
*  trailing character is present it is now sent via port 2 to
*  the host.

*   TRANSPARENT MODE

TMCMD:   LEA     P2CMD0(%PC),%A0
         BSR     FNEXTF         | FIND NEXT FIELD
         MOVE.B  (%A5)+,TMCHARS+1 | QUIT CHARACTER
         BSR     FNEXTF         | FIND NEXT FIELD
         MOVE.B  (%A5)+,TMCHARS | OPTIONAL TRAILING CHAR
P2CMD0:  MOVE.W  TMCHARS,%D7
         BSR     GETSER1        | ADDRESS FOR PORT1 INTO A0
         LEA     MSG006(%PC),%A5 | "TRANSPARENT MODE"
         BSR     FIXDCRLF       | SET UP FOR MESSAGE
         MOVE.L  %D7,%D0        | EXIT CHARACTER
         BSR     PNT2HX         | PRINT 2 HEX CHARACTERS
         MOVE.W  #0x203d,(%A6)+ | " ="
         MOVE.B  %D7,%D0        | SEE IF CONTROL CHAR
         CMPI.B  #BLANK,%D0
         BPL.S   P2CMD01
         MOVE.L  #0x2043544c,(%A6)+ | " CTL"


if (result != IX_SUCCESS) \
            { \
                ERROR_LOG("DB: NPE failed to respond within %dms\n", IX_ETH_DB_NPE_TIMEOUT); \
            } \
        } \
        else \
        { \
            ERROR_LOG("DB: Failed to send NPE message\n"); \
        } \
    } while (0);

#ifndef IX_NDEBUG
#define IX_ETH_DB_NPE_MSG_HISTORY_DEPTH (100)
extern IX_ETH_DB_PUBLIC UINT32 npeMsgHistory[IX_ETH_DB_NPE_MSG_HISTORY_DEPTH][2];
extern IX_ETH_DB_PUBLIC UINT32 npeMsgHistoryLen;
#endif

#define IX_ETHDB_SEND_NPE_MSG(npeId, msg, result) { LOG_NPE_MSG(msg); IX_ETHDB_SYNC_SEND_NPE_MSG(npeId, msg, result); }

#endif /* IxEthDBMessages_p_H */


;XATS000_ctgeq(a,XATSCTAG("S0LAB",0))?b=XATSP1CN("S0LAB",a[3]):XATS000_cfail();a=XATSDAPP(b);return XATSDAPP(s0exp_get_lctn_16105(a))},
l0s0e_get_node_16209=function(a){let b;XATS000_ctgeq(a,XATSCTAG("S0LAB",0))?b=XATSP1CN("S0LAB",a[3]):XATS000_cfail();a=XATSDAPP(b);return XATSDAPP(s0exp_get_node_16171(a))},d0tcn_make_node_17121=function(a,b){return XATSCAPP("D0TCN",[0,a,b])},d0tcn_get_lctn_16976=function(a){XATS000_patck(XATS000_ctgeq(a,XATSCTAG("D0TCN",0)));return XATSP1CN("D0TCN",a[1])},d0tcn_get_node_17009=function(a){XATS000_patck(XATS000_ctgeq(a,XATSCTAG("D0TCN",0)));return XATSP1CN("D0TCN",a[2])},d0typ_make_node_17380=function(a,
b){return XATSCAPP("D0TYP",[0,a,b])},d0typ_get_lctn_17235=function(a){XATS000_patck(XATS000_ctgeq(a,XATSCTAG("D0TYP",0)));return XATSP1CN("D0TYP",a[1])},d0typ_get_node_17268=function(a){XATS000_patck(XATS000_ctgeq(a,XATSCTAG("D0TYP",0)));return XATSP1CN("D0TYP",a[2])},t0int_fprint_3197=function(a,b){let c;XATS000_ctgeq(a,XATSCTAG("T0INTnone",0))?c=XATSDAPP(function(e,l,n){XATSDAPP(function(k){let d;d=XATS2JS_NODE_strn_fprint;let f=XATSDAPP(b);return XATSDAPP(d(k,f))}(e));XATS000_patck(!0);XATSDAPP(function(k){let d=
XATSDAPP(b);return XATSDAPP(token_fprint_7726(k,d))}(l));XATS000_patck(!0);XATSDAPP(function(k){let d;d=XATS2JS_NODE_strn_fprint;let f=XATSDAPP(b);return XATSDAPP(d(k,f))}(n));XATS000_patck(!0);return XATSTUP0([])}(XATSSTRN("T0INTnone("),XATSP1CN("T0INTnone",a[1]),XATSSTRN(")"))):XATS000_ctgeq(a,XATSCTAG("T0INTsome",1))?c=XATSDAPP(function(e,l,n){XATSDAPP(function(k){let d;d=XATS2JS_NODE_strn_fprint;let f=XATSDAPP(b);return XATSDAPP(d(k,f))}(e));XATS000_patck(!0);XATSDAPP(function(k){let d=XATSDAPP(b);
return XATSDAPP(token_fprint_7726(k,d))}(l));XATS000_patck(!0);XATSDAPP(function(k){let d;d=XATS2JS_NODE_strn_fprint;let f=XATSDAPP(b);return XATSDAPP(d(k,f))}(n));XATS000_patck(!0);return XATSTUP0([


 are supported. All other OPAE API
functions not listed here are not supported.
See [here](https://opae.github.io/latest/docs/fpga_api/fpga_api.html) for details
on the OPAE API.

Function  | FPGA_DEVICE | FPGA_ACCELERATOR | Notes
----------|-------------|------------------|------
fpgaEnumerate |  Yes | Yes | Used to discover resources and get token objects.
fpgaCloneToken |  Yes | Yes | Clone a token object created with `fpgaEnumerate`.
fpgaDestroyToken |  Yes | Yes | Destroys a token data structure.
fpgaGetProperties |  Yes | Yes | Get new resource properties structure or an updated structure given a token object.
fpgaUpdateProperties |  Yes | Yes | Update properties from a token structure.
fpgaOpen  | Yes | Yes | Open a resource and get a handle data structure.
fpgaGetPropertiesFromHandle |  Yes | Yes | Get resource properties given a handle object.
fpgaClose | Yes | Yes | Close a resource identified by the handle.
fpgaReset |  No | Yes | Reset accelerator resource.
fpgaWriteMMIO64 |  No | Yes | Write 64-bit word.
fpgaReadMMIO64 |  No | Yes | Read 64-bit word.
fpgaWriteMMIO32 |  No | Yes | Write 32-bit word.
fpgaReadMMIO32 |  No | Yes | Read 32-bit word.
fpgaMapMMIO |  No | Yes | Map and get MMIO pointer for an accelerator resource.
fpgaUnmapMMIO |  No | Yes | Unmap MMIO space for accelerator resource.
fpgaPrepareBuffer |  No | Yes | Allocate and prepare buffer for use by accelerator.
fpgaGetIOAddress |  No | Yes | Get the IO Address of a prepared buffer.
fpgaReleaseBuffer |  No | Yes | Release a previously prepared buffer.

```eval_rst
# pac_hssi_config #

## SYNOPSIS ##
```console
pac_hssi_config.py [-h] subcommand [subarg] [bdf]
```

## DESCRIPTION ##
The `pac_hssi_config.py` tool exercises the Ethernet 10 Gbps (10GbE) and 40GbE transceivers for designs using the
Intel® Programmable Acceleration Card (PAC) with Intel Arria® 10 GX FPGA. This tool does not support the
Intel Xeon® Processor with Integrated FPGA.

![PAC Ethernet Block Diagram](./dcp_hssi_arch.PNG "PAC Ethernet Block Diagram")

The two required arguments to the `pac_hssi_config.py` tool specify the subcommand and bus, device, and function (BDF)
for the PCIe device under test. You must provide the BDF parameter for systems with more than one PCIe card.

```eval_rst
.. note::
    If you do not provide the BDF when required, the command prints a list of valid BDFs for the system. You can also
    determine the BDF using the ``lspci`` command.
```

For usage help, type the following at a command prompt:

```pac_hssi_config.py [-h|--help]```

To configure the network ports, send data, and read statistics, use the following form of the `pac_hssi_config.py` script:

```pac_hssi_config.py subcommand [subarg] [bdf]```

Only a subset of subcommand arguments support `subarg`.

### Table 1. General Subcommands ###
| Subcommand | Subarg | Description |
|------------|:--------:| ------------|
| `stat`     | N/A      | Prints high speed serial interface (HSSI) controller statistics. |
| `eeprom`   | N/A      | Reads the 128-bit unique board ID, MAC address, and board-specific IDs from EEPROM. |

### Table 2. 10/40 GbE Traffic Generation Subcommands ###
| Subcommand | Subarg | Description |
|---------


Points GetForcePoints() const;

public:
	static class UClass* StaticClass()
	{
		return StaticClassImpl<"ForcePointDataProvider">();
	}
	static class IForcePointDataProvider* GetDefaultObj()
	{
		return GetDefaultObjImpl<IForcePointDataProvider>();
	}

	class UObject* AsUObject()
	{
		return reinterpret_cast<UObject*>(this);
	}
	const class UObject* AsUObject() const
	{
		return reinterpret_cast<const UObject*>(this);
	}
};
static_assert(alignof(IForcePointDataProvider) == 0x000001, "Wrong alignment on IForcePointDataProvider");
static_assert(sizeof(IForcePointDataProvider) == 0x000001, "Wrong size on IForcePointDataProvider");

// Class CascadeExtensionPlugin.MeshDataProvider
// 0x0000 (0x0000 - 0x0000)
class IMeshDataProvider final
{
public:
	int32 GetDataRevision() const;
	struct FMeshTriangleData GetMeshTriangleData() const;

public:
	static class UClass* StaticClass()
	{
		return StaticClassImpl<"MeshDataProvider">();
	}
	static class IMeshDataProvider* GetDefaultObj()
	{
		return GetDefaultObjImpl<IMeshDataProvider>();
	}

	class UObject* AsUObject()
	{
		return reinterpret_cast<UObject*>(this);
	}
	const class UObject* AsUObject() const
	{
		return reinterpret_cast<const UObject*>(this);
	}
};
static_assert(alignof(IMeshDataProvider) == 0x000001, "Wrong alignment on IMeshDataProvider");
static_assert(sizeof(IMeshDataProvider) == 0x000001, "Wrong size on IMeshDataProvider");

// Class CascadeExtensionPlugin.ParticleDataProvider
// 0x0000 (0x0000 - 0x0000)
class IParticleDataProvider final
{
public:
	struct FParticleProperties SpawnParticle(const struct FParticleProperties& currentParticleProperties) const;
	struct FParticleProperties UpdateParticle(const struct FParticleProperties& currentParticleProperties) const;

public:
	static class UClass* StaticClass()
	{
		return StaticClassImpl<"ParticleDataProvider">();
	}
	static class IParticleDataProvider* GetDefaultObj()
	{
		return GetDefaultObjImpl<IParticleDataProvider>();
	}

	class UObject* AsUObject()
	{
		return reinterpret_cast<UObject*>(this);
	}
	const class UObject* AsUObject() const
	{
		return reinterpret_cast<const UObject*>(this);
	}
};
static_assert(alignof(IParticleDataProvider) == 0x000001, "Wrong alignment on IParticleDataProvider");
static_assert(sizeof(IParticleDataProvider) == 0x000001, "Wrong size on IParticleDataProvider");

// Class CascadeExtensionPlugin.ParticleDecalComponent
// 0x0020 (0x03A0 - 0x0380)
class UParticleDecalComponent final : public UDecalComponent
{
public:
	int32                                         ModuleID;                                          // 0x0380(0x0004)(BlueprintVisible, BlueprintReadOnly, ZeroConstructor, IsPlainOldData, NoDestructor, HasGetValueTypeHash, NativeAccessSpecifierPublic)
	float                                         TimeLeftUntilDestruction;                          // 0x0384(0x0004)(BlueprintVisible, BlueprintReadOnly, ZeroConstructor, IsPlainOldData, NoDestructor, HasGetValueTypeHash, NativeAccessSpecifierPublic)
	struct FVector                                BaseScale;                                         // 0x0388(0x000C)(BlueprintVisible, BlueprintReadOnly, ZeroConstructor, IsPlainOldData, NoDestructor, HasGetValueTypeHash, NativeAccessSpecifierPublic)
	uint8                                         Pad_394[0xC];                                      // 0x0394(0x000C)(Fixing Struct Size After Last Property [ Dumper-7 ])

public:
	static class UClass* StaticClass()
	{
		return StaticClassImpl<"ParticleDecalComponent">();
	}
	static class UParticleDecalComponent* GetDefaultObj()
	{
		return GetDefaultObjImpl<UParticleDec


/*
 *  Copyright 2018 The WebRTC project authors. All Rights Reserved.
 *
 *  Use of this source code is governed by a BSD-style license
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */
#ifndef VIDEO_TEST_MOCK_VIDEO_STREAM_ENCODER_H_
#define VIDEO_TEST_MOCK_VIDEO_STREAM_ENCODER_H_

#include <cstddef>
#include <cstdint>
#include <vector>

#include "api/adaptation/resource.h"
#include "api/fec_controller_override.h"
#include "api/rtp_parameters.h"
#include "api/rtp_sender_interface.h"
#include "api/scoped_refptr.h"
#include "api/units/data_rate.h"
#include "api/video/video_frame.h"
#include "api/video/video_frame_type.h"
#include "api/video/video_source_interface.h"
#include "api/video_codecs/video_encoder.h"
#include "test/gmock.h"
#include "video/config/video_encoder_config.h"
#include "video/video_stream_encoder_interface.h"

namespace webrtc {

class MockVideoStreamEncoder : public VideoStreamEncoderInterface {
 public:
  MOCK_METHOD(void,
              AddAdaptationResource,
              (scoped_refptr<Resource>),
              (override));
  MOCK_METHOD(std::vector<scoped_refptr<Resource>>,
              GetAdaptationResources,
              (),
              (override));
  MOCK_METHOD(void,
              SetSource,
              (VideoSourceInterface<VideoFrame>*, const DegradationPreference&),
              (override));
  MOCK_METHOD(void, SetSink, (EncoderSink*, bool), (override));
  MOCK_METHOD(void, SetStartBitrate, (int), (override));
  MOCK_METHOD(void,
              SendKeyFrame,
              (const std::vector<VideoFrameType>&),
              (override));
  MOCK_METHOD(void,
              OnLossNotification,
              (const VideoEncoder::LossNotification&),
              (override));
  MOCK_METHOD(void,
              OnBitrateUpdated,
              (DataRate, DataRate, uint8_t, int64_t, double),
              (override));
  MOCK_METHOD(void,
              SetFecControllerOverride,
              (FecControllerOverride*),
              (override));
  MOCK_METHOD(void, Stop, (), (override));

  MOCK_METHOD(void,
              MockedConfigureEncoder,
              (const VideoEncoderConfig&, size_t));
  MOCK_METHOD(void,
              MockedConfigureEncoder,
              (const VideoEncoderConfig&, size_t, SetParametersCallback));
  // gtest generates implicit copy which is not allowed on VideoEncoderConfig,
  // so we can't mock ConfigureEncoder directly.
  void ConfigureEncoder(VideoEncoderConfig config,
                        size_t max_data_payload_length) {
    MockedConfigureEncoder(config, max_data_payload_length);
  }
  void ConfigureEncoder(VideoEncoderConfig config,
                        size_t max_data_payload_length,
                        SetParametersCallback) {
    MockedConfigureEncoder(config, max_data_payload_length);
  }
};

}  // namespace webrtc

#endif  // VIDEO_TEST_MOCK_VIDEO_STREAM_ENCODER_H_


1.358-.305-.259-.83-.784-1.144-1.06l-.832-.921c-.284-.36-.629-1.093-1.243-1.985-.348-.504-1.027-1.085-1.284-1.579-.223-.425-.331-.954-.19-1.325.225-.594.675-.897 1.362-.832.519.05.848.206 1.238.537.225.19.573.534.75.748.163.195.203.276.377.509.23.307.302.459.214.121' fill='white'/><g stroke='black' stroke-linecap='round' stroke-width='.75'><path d='m13.5557 17.5742c-.098-.375-.196-.847-.406-1.552-.167-.557-.342-.859-.47-1.233-.155-.455-.303-.721-.496-1.181-.139-.329-.364-1.048-.457-1.44-.119-.509.033-.924.244-1.206.253-.339.962-.49 1.357-.351.371.13.744.512.916.788.288.46.357.632.717 1.542.393.992.564 1.918.611 2.231l.085.452c-.001-.04-.043-1.122-.044-1.162-.035-1.029-.06-1.823-.038-2.939.002-.126.064-.587.084-.715.078-.5.305-.8.673-.979.412-.201.926-.215 1.401-.017.423.173.626.55.687 1.022.014.109.094.987.093 1.107-.013 1.025.006 1.641.015 2.174.004.231.003 1.625.017 1.469.061-.656.094-3.189.344-3.942.144-.433.405-.746.794-.929.431-.203 1.113-.07 1.404.243.285.305.446.692.482 1.153.032.405-.019.897-.02 1.245 0 .867-.021 1.324-.037 2.121-.001.038-.015.298.023.182.094-.28.188-.542.266-.745.049-.125.241-.614.359-.859.114-.234.211-.369.415-.688.2-.313.415-.448.668-.561.54-.235 1.109.112 1.301.591.086.215.009.713-.028 1.105-.061.647-.254 1.306-.352 1.648-.128.447-.274 1.235-.34 1.601-.072.394-.234 1.382-.359 1.82-.086.301-.371.978-.652 1.384 0 0-1.074 1.25-1.192 1.812-.117.563-.078.567-.101.965-.024.399.121.923.121.923s-.802.104-1.234.034c-.391-.062-.875-.841-1-1.078-.172-.328-.539-.265-.682-.023-.225.383-.709 1.07-1.051 1.113-.668.084-2.054.031-3.139.02 0 0 .185-1.011-.227-1.358-.305-.26-.83-.784-1.144-1.06l-.832-.921c-.284-.36-.629-1.093-1.243-1.985-.348-.504-1.027-1.085-1.284-1.579-.223-.425-.331-.954-.19-1.325.225-.594.675-.897 1.362-.832.519.05.848.206 1.238.537.225.19.573.534.75.748.163.195.203.276.377.509.23.307.302.459.214.121' stroke-linejoin='round'/><path d='m20.5664 21.7344v-3.459'/><path d='m18.5508 21.7461-.016-3.473'/><path d='m16.5547 18.3047.021 3.426'/></g></g></svg>")


import sqlite3

# Ścieżka do Twojej bazy danych
db_path = "firos_game_database.db"  # Upewnij się, że ścieżka jest poprawna

# Połączenie z bazą danych
conn = sqlite3.connect(db_path)
cursor = conn.cursor()

# Tworzenie tabeli na NFT, jeśli nie istnieje
cursor.execute("""
CREATE TABLE IF NOT EXISTS nft_inventory (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT,
    rarity TEXT,
    crafting TEXT,
    attributes TEXT,
    available TEXT
)
""")

# Przykładowe dane NFT
nft_cards = [
    {
        "name": "Znachorka",
        "rarity": "Epic",
        "crafting": "Eliksir Wilczego Kła, Zioła Snów, Korzeń Wieszczki",
        "attributes": "Leczenie 9, Alchemia 10, Inteligencja 8",
        "available": "TON, RFN"
    },
    {
        "name": "Berserker z Gór",
        "rarity": "Rare",
        "crafting": "Kamień Furii, Kość Trolla",
        "attributes": "Siła 10, Wściekłość 9, Obrona 6",
        "available": "RFN"
    },
    {
        "name": "Nekromanta",
        "rarity": "Legendary",
        "crafting": "Proch Umarłych, Krew Demona",
        "attributes": "Magia Ciemności 10, Mana 9",
        "available": "TON"
    }
]

# Wyczyść tabelę (opcjonalnie, jeśli robisz update)
cursor.execute("DELETE FROM nft_inventory")

# Zapisz NFT do bazy
for card in nft_cards:
    cursor.execute("""
        INSERT INTO nft_inventory (name, rarity, crafting, attributes, available)
        VALUES (?, ?, ?, ?, ?)
    """, (
        card["name"],
        card["rarity"],
        card["crafting"],
        card["attributes"],
        card["available"]
    ))

conn.commit()
conn.close()

print("Zaktualizowano NFT w bazie danych.")


y `T<A>` satisfy the predicate `a`
 *
 * ```ts
 * import { Arr, Num } 'tiinvo';
 *
 * Arr.every(Num.isEven)([10, 20])      // true
 * Arr.every(Num.isEven)([10, 21])      // false
 * ```
 *
 * @template A the array's type
 * @param a the predicate
 * @returns the unary function
 * @group Native methods
 * @since 4.0.0
 */
export function every<A>(a: Predicate.T<A>): Fn.Unary<T<A>, boolean>;
export function every<A>(a: any, p?: any): any
{
  if (guard(a) && typeof p === 'function')
  {
    return a.every(p);
  }

  return (b: T<A>) => b.every(a as Predicate.T<A>);
}

/**
 * Creates an array from an array-like object.
 *
 * ```ts
 * import { Arr } 'tiinvo';
 *
 * Arr.from([1, 2, 3]) // [1, 2, 3]
 * Arr.from(new Set([1, 2, 3])) // [1, 2, 3]
 * ```
 *
 * @param a an array-like object to convert to an array.
 * @returns the array
 * @group Native methods
 * @since 4.0.0
 */
export const from = Array.from;

/**
 * Fills an array `T<A>` with `a` from index `start` to `end`.
 * This does not modify the original array.
 *
 * ```ts
 * import { Arr } from 'tiinvo';
 *
 * const x = Arr.make(4)
 *
 * Arr.fill(x, 10, 0, 3)           // [10, 10, 10, 10]
 * Arr.fill(x, 10)                 // [10, 10, 10, 10]
 * ```
 *
 * @template A the array's type
 * @param a the array
 * @param start
 * @param end
 * @returns
 * @group Native methods
 * @since 4.0.0
 */
export function fill<A>(a: T<any>, b: A, start?: number, end?: number): T<A>;
/**
 * Fills an array `T<A>` with `a` from index `start` to `end`.
 * This does not modify the original array.
 *
 * ```ts
 * import { Arr } from 'tiinvo';
 *
 * const x = Arr.make(4)
 *
 * Arr.fill(10, 0, 3)(x)           // [10, 10, 10, 10]
 * Arr.fill(10)(x)                 // [10, 10, 10, 10]
 * ```
 *
 * @template A the array's type
 * @param a the value to fill the array
 * @param b the start index
 * @param start the end index
 * @returns
 * @group Native methods
 * @since 4.0.0
 */
export function fill<A>(a: A, b?: number, start?: number): (a: T<any>, start2?: number, end2?: number) => T<A>;
export function fill<A>(a: T<any> | A, b?: any, start?: any, end?: any): any
{
  if (guard(a))
  {
    return a.fill(b, start, end);
  }

  return (c: T<A>, start2?: number, end2?: number) => c.fill(b, b ?? start2, start ?? end2);
}

/**
 * Returns the elements of an array `A` that meet the condition specified in a predicate `p`.
 *
 * ```ts
 * import { Arr, Num } 'tiinvo';
 *
 * const x = [10, 20, 30];
 *
 * Arr.filter(x, Num.gt(10))    // [20, 30]
 * Arr.filter(Num.gt(10))(x)    // [20, 30]
 * ```
 *
 * @template A array's type
 * @param a the array to filter


ost:%s%s", port,GlobalContext.getContextPath());
		HostMappingHolder.addProxyUrlMapping(GlobalContext.APPID, proxyUrl);
		HostMappingHolder.reload();
		//重新加载日志配置
		LogProfileManager.reload();
		//
		System.out.println("\n");
		if (System.getProperties().containsKey("_app_start_time_point")) {
			long startTime = Long.parseLong(System.getProperties().remove("_app_start_time_point").toString());
			long endTime = System.currentTimeMillis();
			long time = endTime - startTime;
			System.out.println("Start Using Time: " + time / 1000 + " s");
		}
		System.out.println("...............................................................");
		System.out.println("..................Service starts successfully (port:"
				+ ResourceUtils.getProperty("server.port") + ")..................");
		System.out.println("...............................................................");
	}

}
/*
 * Copyright 2016-2022 dromara.org.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.dromara.mendmix.springweb.client;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;

import org.dromara.mendmix.common.util.RequestLogBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpRequest;
import org.springframework.http.client.AbstractClientHttpResponse;
import org.springframework.http.client.ClientHttpRequestExecution;
import org.springframework.http.client.ClientHttpRequestInterceptor;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.util.StreamUtils;

public class HttpClientLoggingInterceptor implements ClientHttpRequestInterceptor {

    private static final Logger log = LoggerFactory.getLogger(HttpClientLoggingInterceptor.class);

    @Override
    public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
        traceRequest(request, body);
        ClientHttpResponse response = execution.execute(request, body);
        response = traceResponse(response);
        return response;
    }

    private void traceRequest(HttpRequest request, byte[] body) throws IOException {
        if(log.isTraceEnabled()){
        	String requestLog = RequestLogBuilder.requestLogMessage(request.getURI().toString(), request.getMethod().name(), request.getMethodValue(), body);
            log.trace(requestLog);
        }
    }

    private ClientHttpResponse traceResponse(ClientHttpResponse response) throws IOException {
        if(log.isTraceEnabled()){
        	CloneHttpResponse cloneResponse = new CloneHttpResponse(response);
        	String responseLog = RequestLogBuilder.responseLogMessage(cloneResponse.getStatusCode().value(),response.getHeaders(), cloneResponse.bodyString());
        	log.trace(responseLog);
            return cloneResponse;
        }

        return response;
    }

    private class CloneHttpResponse extends AbstractClientHttpResponse{

    	private ClientHttpResponse response;
    	private InputStream responseStream;
    	private String bodyString;

    	public CloneHttpResponse(ClientHttpResponse response) {
			this.response = response;