JoyLau's Blog

JoyLau 的技术学习与思考

  1. 查看 所有 node 节点的调度
1
2
3
4
5
6
7
8
[root@node01 efk]# kubectl describe node|grep -E "Name:|Taints:"
Name: k8s-master1
Taints: node-role.kubernetes.io/master:NoSchedule
Name: k8s-node1
Taints: <none>
Name: k8s-node2
Taints: <none>

  1. 去除 k8s-master1 节点不允许配置的 label

kubectl taint node k8s-master1 node-role.kubernetes.io/master-

  1. 所有节点不允许调度的 label 去除

kubectl taint nodes --all node-role.kubernetes.io/master-

  1. 重新设置 master 节点不允许调度 pod

kubectl taint node k8s-master1 node-role.kubernetes.io/master=:NoSchedule

污点可选参数:

NoSchedule: 一定不能被调度
PreferNoSchedule: 尽量不要调度
NoExecute: 不仅不会调度, 还会驱逐Node上已有的Pod

说明

最近在内网部署一些服务,原生的 CentOS mini 系统很多命令没有安装无法使用,手上又没有可用的源,于是想到使用 busybox 来解决问题

步骤

1
2
3
4
5
6
7
8
9
10
11
12
13
yum install -y gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel zlib-devel libmcrypt-devel glibc-static ncurses-devel
cd tmp
mkdir busybox
cd busybox
wget https://busybox.net/downloads/busybox-1.34.0.tar.bz2
tar xvf busybox-1.34.0.tar.bz2
cd busybox-1.34.0/
make menuconfig
## 按下面选择,把busybox编译成静态二进制、不用共享库
## Settings --> Build Options --> [*] Build BusyBox as a static binary (no shared libs) 按 Y 选中
make ## 编译成二进制文件 busybox
## make install ## 编译并安装,会污染系统目录
# 如果出错,执行make clean后,重新执行上面命令

可执行文件

下面是我编译好二进制文件,可直接下载使用
busybox

可使用命令如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Currently defined functions:
[, [[, acpid, add-shell, addgroup, adduser, adjtimex, arch, arp, arping, ascii, ash, awk, base32, base64, basename, bc, beep, blkdiscard, blkid, blockdev, bootchartd, brctl, bunzip2, bzcat, bzip2, cal,
cat, chat, chattr, chgrp, chmod, chown, chpasswd, chpst, chroot, chrt, chvt, cksum, clear, cmp, comm, conspy, cp, cpio, crc32, crond, crontab, cryptpw, cttyhack, cut, date, dc, dd, deallocvt, delgroup,
deluser, depmod, devmem, df, dhcprelay, diff, dirname, dmesg, dnsd, dnsdomainname, dos2unix, dpkg, dpkg-deb, du, dumpkmap, dumpleases, echo, ed, egrep, eject, env, envdir, envuidgid, ether-wake, expand,
expr, factor, fakeidentd, fallocate, false, fatattr, fbset, fbsplash, fdflush, fdformat, fdisk, fgconsole, fgrep, find, findfs, flock, fold, free, freeramdisk, fsck, fsck.minix, fsfreeze, fstrim, fsync,
ftpd, ftpget, ftpput, fuser, getopt, getty, grep, groups, gunzip, gzip, halt, hd, hdparm, head, hexdump, hexedit, hostid, hostname, httpd, hush, hwclock, i2cdetect, i2cdump, i2cget, i2cset, i2ctransfer,
id, ifconfig, ifdown, ifenslave, ifplugd, ifup, inetd, init, insmod, install, ionice, iostat, ip, ipaddr, ipcalc, ipcrm, ipcs, iplink, ipneigh, iproute, iprule, iptunnel, kbd_mode, kill, killall,
killall5, klogd, last, less, link, linux32, linux64, linuxrc, ln, loadfont, loadkmap, logger, login, logname, logread, losetup, lpd, lpq, lpr, ls, lsattr, lsmod, lsof, lspci, lsscsi, lsusb, lzcat, lzma,
lzop, makedevs, makemime, man, md5sum, mdev, mesg, microcom, mim, mkdir, mkdosfs, mke2fs, mkfifo, mkfs.ext2, mkfs.minix, mkfs.vfat, mknod, mkpasswd, mkswap, mktemp, modinfo, modprobe, more, mount,
mountpoint, mpstat, mt, mv, nameif, nanddump, nandwrite, nbd-client, nc, netstat, nice, nl, nmeter, nohup, nologin, nproc, nsenter, nslookup, ntpd, od, openvt, partprobe, passwd, paste, patch, pgrep,
pidof, ping, ping6, pipe_progress, pivot_root, pkill, pmap, popmaildir, poweroff, powertop, printenv, printf, ps, pscan, pstree, pwd, pwdx, raidautorun, rdate, rdev, readahead, readlink, readprofile,
realpath, reboot, reformime, remove-shell, renice, reset, resize, resume, rev, rm, rmdir, rmmod, route, rpm, rpm2cpio, rtcwake, run-init, run-parts, runlevel, runsv, runsvdir, rx, script, scriptreplay,
sed, sendmail, seq, setarch, setconsole, setfattr, setfont, setkeycodes, setlogcons, setpriv, setserial, setsid, setuidgid, sh, sha1sum, sha256sum, sha3sum, sha512sum, showkey, shred, shuf, slattach,
sleep, smemcap, softlimit, sort, split, ssl_client, start-stop-daemon, stat, strings, stty, su, sulogin, sum, sv, svc, svlogd, svok, swapoff, swapon, switch_root, sync, sysctl, syslogd, tac, tail, tar,
taskset, tc, tcpsvd, tee, telnet, telnetd, test, tftp, tftpd, time, timeout, top, touch, tr, traceroute, traceroute6, true, truncate, ts, tty, ttysize, tunctl, ubiattach, ubidetach, ubimkvol, ubirename,
ubirmvol, ubirsvol, ubiupdatevol, udhcpc, udhcpc6, udhcpd, udpsvd, uevent, umount, uname, unexpand, uniq, unix2dos, unlink, unlzma, unshare, unxz, unzip, uptime, users, usleep, uudecode, uuencode,
vconfig, vi, vlock, volname, w, wall, watch, watchdog, wc, wget, which, who, whoami, whois, xargs, xxd, xz, xzcat, yes, zcat, zcip

说明

jackson 中将 json 转为 Java 复杂对象一般会使用 new TypeReference<List>(){} 的匿名内部类来实现

这种方式有 2 个缺点

  1. 会不符合一些代码检测规范,比如 spotbugs, 会报出 SIC_INNER_SHOULD_BE_STATIC_ANON 的规范检查问题
  2. 无法动态的指定泛型类型

解决方式

使用 TypeFactory 类中的 constructParametricType 方法来解决泛型问题

使用示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class TypeReferenceApiResult<T> extends TypeReference<ApiResult<T>> {

protected final Type type;

public TypeReferenceApiResult(Class<T> clazz) {
type = new ObjectMapper().getTypeFactory().constructParametricType(ApiResult.class, clazz);
}


@Override
public Type getType() {
return type;
}
}
1
2
3
4
ApiResult<UserCreateResult> apiResult = new ObjectMapper()
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
.readValue(response.getContentAsByteArray(),
new TypeReferenceApiResult<>(UserCreateResult.class));

使用 TypeReferenceApiResult 对象会被反序列化为 ApiResult<T> 的泛型类型, 其中可以通过传入构造参数指定 T 的 class 类型

扩展

TypeFactory 内置了很多生成 JavaType 的方法,用于生成各类 JavaType 对象

  1. constructCollectionType
  2. constructMapLikeType
  3. constructParametricType

详情可以使用 new ObjectMapper().getTypeFactory() 再查看其中的方法查看更多的 JavaType 类型

安装

1
yum install ntp

修改配置文件 /etc/ntp.conf

将配置文件里的

1
2
3
4
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst

全部注释掉, 换成本地时间服务器

server 127.127.1.0 iburst

测试

1
2
systemctl enable ntpd
stsremctl start ntpd

有防火墙的需要打开 123 端口

使用

ntpq -p 查看同步结果

在其他服务器上使用

ntpdate -q ip 测试查看结果

输出如下结果则服务器正常

1
2
3
[root@TEST dns]# ntpdate -q 192.168.1.182
server 192.168.1.182, stratum 6, offset -0.141762, delay 0.02614
30 Aug 15:57:00 ntpdate[25093]: adjust time server 192.168.1.182 offset -0.141762 sec

启动脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
version: "3"
services:
dns-server:
image: sameersbn/bind:9.16.1-20200524
container_name: dns-server
restart: always
volumes:
- ./data:/data
ports:
- 53:53/udp
- 53:53/tcp
- 10000:10000
environment:
- ROOT_PASSWORD=Kaiyuan@2020
- WEBMIN_INIT_SSL_ENABLED=false

配置

先将界面语言切换为中文

配置自定义域名

  1. 创建一个主区域
  2. 域名 / 网络 这一栏填写根域名
  3. 在 地址 记录里添加二级域名, 名称填写二级域名,地址填 IP 地址
  4. 点击右上角的刷新按钮应用配置

配置转发

  1. 点击 “转发和传输”, 添加一个上级的 DNS 服务器地址: 223.5.5.5
  2. 在配置运行查询的权限, 进入 “默认区域”, “默认的区域设置”, “允许查询自… ” 选择 “列出的 ”, 填入 “any”, 返回保存
  3. 使用 dig @dns-ip baidu.com 调试结果
  4. 如果还遇到问题,进入 “DNSSEC Verification” 将 “DNSSEC response validation enabled?” 和 “DNSSEC enabled?” 都选择 “否”, 返回保存即可

解决

Dockerfile

1
2
3
4
5
FROM centos:7
# 解决镜像中文乱码的问题
RUN yum install -y glibc-common kde-l10n-Chinese
RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
ENV LC_ALL zh_CN.UTF-8

错误信息

macOS 的问题报告

系统登录后报错信息如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
panic(cpu 0 caller 0xffffff7f83e24231): nvme: "Fatal error occurred. CSTS=0x1 US[1]=0x0 US[0]=0xa6 VID=0x144d DID=0xa808
. FW Revision=EXA7301Q\n"@/AppleInternal/BuildRoot/Library/Caches/com.apple.xbs/Sources/IONVMeFamily/IONVMeFamily-470.100.17/IONVMeController.cpp:5320
Backtrace (CPU 0), Frame : Return Address
0xffffff8e0693b9e0 : 0xffffff800031868d mach_kernel : _handle_debugger_trap + 0x49d
0xffffff8e0693ba30 : 0xffffff8000452ab5 mach_kernel : _kdp_i386_trap + 0x155
0xffffff8e0693ba70 : 0xffffff800044463e mach_kernel : _kernel_trap + 0x4ee
0xffffff8e0693bac0 : 0xffffff80002bea40 mach_kernel : _return_from_trap + 0xe0
0xffffff8e0693bae0 : 0xffffff8000317d57 mach_kernel : _DebuggerTrapWithState + 0x17
0xffffff8e0693bbe0 : 0xffffff8000318147 mach_kernel : _panic_trap_to_debugger + 0x227
0xffffff8e0693bc30 : 0xffffff8000abf2bc mach_kernel : _panic + 0x54
0xffffff8e0693bca0 : 0xffffff7f83e24231 com.apple.iokit.IONVMeFamily : __ZN16IONVMeController8PolledIOEhP18IOMemoryDescriptorjyy18IOPolledCompletionjPKhm.cold.1
0xffffff8e0693bcc0 : 0xffffff7f83e0f362 com.apple.iokit.IONVMeFamily : __ZN16IONVMeController18RequestAsyncEventsEj
0xffffff8e0693be20 : 0xffffff8000a2fb29 mach_kernel : __ZN18IOTimerEventSource15timeoutSignaledEPvS0_ + 0x89
0xffffff8e0693be90 : 0xffffff8000a2fa49 mach_kernel : __ZN18IOTimerEventSource17timeoutAndReleaseEPvS0_ + 0x99
0xffffff8e0693bec0 : 0xffffff800035a645 mach_kernel : _thread_call_delayed_timer + 0xec5
0xffffff8e0693bf40 : 0xffffff800035a171 mach_kernel : _thread_call_delayed_timer + 0x9f1
0xffffff8e0693bfa0 : 0xffffff80002be13e mach_kernel : _call_continuation + 0x2e
Kernel Extensions in backtrace:
com.apple.iokit.IONVMeFamily(2.1)[2D554F70-092B-3B6B-B2AD-5C09EDB5B4F8]@0xffffff7f83e01000->0xffffff7f83e43fff
dependency: com.apple.driver.AppleMobileFileIntegrity(1.0.5)[4159DFFE-7746-3327-9752-C161DC295828]@0xffffff7f813a4000
dependency: com.apple.iokit.IOPCIFamily(2.9)[2F37AE58-E6B9-3B18-9092-3B80D34C334B]@0xffffff7f80d31000
dependency: com.apple.driver.AppleEFINVRAM(2.1)[10E46031-889C-3FB7-8B4B-0DECAB5AE325]@0xffffff7f81628000
dependency: com.apple.iokit.IOStorageFamily(2.1)[CB3CB8CA-881A-37F3-A96B-8063CAF0476D]@0xffffff7f80f17000
dependency: com.apple.iokit.IOReportFamily(47)[72B53B80-5713-30C1-BAD8-9D55FD718DA2]@0xffffff7f810d3000

BSD process name corresponding to current thread: kernel_task
Boot args: keepsyms=1 agdpmod=pikera shikigva=80

Mac OS version:
19H15

Kernel version:
Darwin Kernel Version 19.6.0: Thu Oct 29 22:56:45 PDT 2020; root:xnu-6153.141.2.2~1/RELEASE_X86_64
Kernel UUID: 9B5A7191-5B84-3990-8710-D9BD9273A8E5
__HIB text base: 0xffffff8000100000
System model name: iMac19,1 (Mac-AA95B1DDAB278B95)
System shutdown begun: YES
Panic diags file available: YES (0x0)

System uptime in nanoseconds: 81836972997
last loaded kext at 31787099012: >!AHIDKeyboard 209 (addr 0xffffff7f83d6e000, size 45056)
loaded kexts:
com.intel.driver.EnergyDriver 3.7.0
as.acidanthera.mieze.!IMausi 1.0.4
ru.joedm.SMCSuperIO 1.1.8
as.vit9696.SMCProcessor 1.1.8
as.vit9696.VirtualSMC 1.1.8
as.vit9696.WhateverGreen 1.4.4
as.vit9696.!AALC 1.5.4
as.vit9696.Lilu 1.4.9
>AudioAUUC 1.70
>!AUpstreamUserClient 3.6.8
>!AMCCSControl 1.14
@kext.AMDFramebuffer 3.1.0
>!AHDAHardwareConfigDriver 283.15
>!AHDA 283.15
@fileutil 20.036.15
@filesystems.autofs 3.0
>!APlatformEnabler 2.7.0d0
>AGPM 111.4.4
>X86PlatformShim 1.0.0
@kext.AMDRadeonX4000 3.1.0
@kext.AMDRadeonServiceManager 3.1.0
>!AGraphicsDevicePolicy 5.2.6
@AGDCPluginDisplayMetrics 5.2.6
>!A!IKBLGraphics 14.0.7
>!A!ICFLGraphicsFramebuffer 14.0.7
>!AFIVRDriver 4.1.0
@kext.AMD9500!C 3.1.0
>!A!IPCHPMC 2.0.1
>!AGFXHDA 100.1.429
>!AHV 1
|IOUserEthernet 1.0.1
|IO!BSerialManager 7.0.6f7
>pmtelemetry 1
@Dont_Steal_Mac_OS_X 7.0.0
>!A!ISlowAdaptiveClocking 4.0.0
>ACPI_SMC_PlatformPlugin 1.0.0
@private.KextAudit 1.0
|IO!BUSBDFU 7.0.6f7
>!AFileSystemDriver 3.0.1
>!AVirtIO 1.0
@filesystems.hfs.kext 522.100.5
@!AFSCompression.!AFSCompressionTypeDataless 1.0.0d1
@BootCache 40
@!AFSCompression.!AFSCompressionTypeZlib 1.0.0
@filesystems.apfs 1412.141.1
>AirPort.BrcmNIC 1400.1.1
>!AAHCIPort 341.140.1
>!ARTC 2.0
>!AACPIButtons 6.1
>!AHPET 1.8
>!ASMBIOS 2.1
>!AAPIC 1.7
$!AImage4 1
@nke.applicationfirewall 303
$TMSafetyNet 8
@!ASystemPolicy 2.0.0
|EndpointSecurity 1
>!AHIDKeyboard 209
>IO!BHIDDriver 7.0.6f7
>!ASMBus!C 1.0.18d1
|IOSMBus!F 1.1
>DspFuncLib 283.15
@kext.OSvKernDSPLib 529
@kext.triggers 1.0
@kext.AMDRadeonX4000HWLibs 1.0
@kext.AMDRadeonX4000HWServices 3.1.0
>!AGraphicsControl 5.2.6
>!AHDA!C 283.15
|IOHDA!F 283.15
>!ASMBusPCI 1.0.14d1
|IOAccelerator!F2 438.7.3
@kext.AMDSupport 3.1.0
|IONDRVSupport 576.1
|IOAVB!F 850.1
@!AGPUWrangler 5.2.6
@!AGraphicsDeviceControl 5.2.6
|IOGraphics!F 576.1
|IOSlowAdaptiveClocking!F 1.0.0
>IOPlatformPluginLegacy 1.0.0
>X86PlatformPlugin 1.0.0
>IOPlatformPlugin!F 6.0.0d8
@plugin.IOgPTPPlugin 840.3
|IOEthernetAVB!C 1.1.0
|IOAHCIBlock!S 316.100.5
|Broadcom!BHost!CUSBTransport 7.0.6f7
|IO!BHost!CUSBTransport 7.0.6f7
|IO!BHost!CTransport 7.0.6f7
|IO!B!F 7.0.6f7
|IO!BPacketLogger 7.0.6f7
>usb.IOUSBHostHIDDevice 1.2
>usb.cdc 5.0.0
>usb.networking 5.0.0
>usb.!UHostCompositeDevice 1.2
>usb.!UHub 1.2
>!UMergeNub 900.4.2
|IOAudio!F 300.2
@vecLib.kext 1.2.0
|IOSerial!F 11
|IOSurface 269.11
@filesystems.hfs.encodings.kext 1
>usb.!UHostPacketFilter 1.0
|IOUSB!F 900.4.2
>!AXsanScheme 3
|IO80211!F 1200.12.2b1
>mDNSOffloadUserClient 1.0.1b8
>corecapture 1.0.4
|IONVMe!F 2.1.0
>!AEFINVRAM 2.1
|IOSkywalk!F 1
|IOAHCI!F 290.0.1
>usb.!UXHCIPCI 1.2
>usb.!UXHCI 1.2
>!AEFIRuntime 2.1
|IOHID!F 2.0.0
$quarantine 4
$sandbox 300.0
@kext.!AMatch 1.0.0d1
>DiskImages 493.0.0
>!AFDEKeyStore 28.30
>!AEffaceable!S 1.0
>!ASSE 1.0
>!AKeyStore 2
>!UTDM 489.120.1
|IOSCSIBlockCommandsDevice 422.120.3
>!ACredentialManager 1.0
>KernelRelayHost 1
>!ASEPManager 1.0.1
>IOSlaveProcessor 1
|IOUSBMass!SDriver 157.140.1
|IOSCSIArchitectureModel!F 422.120.3
|IO!S!F 2.1
|IOUSBHost!F 1.2
>!UHostMergeProperties 1.2
>usb.!UCommon 1.0
>!ABusPower!C 1.0
|CoreAnalytics!F 1
>!AMobileFileIntegrity 1.0.5
@kext.CoreTrust 1
|IOTimeSync!F 840.3
|IONetworking!F 3.4
|IOReport!F 47
>!AACPIPlatform 6.1
>!ASMC 3.1.9
>watchdog 1
|IOPCI!F 2.9
|IOACPI!F 1.4
@kec.pthread 1
@kec.corecrypto 1.0
@kec.Libm 1



修复方法

见 GitHub: https://github.com/acidanthera/NVMeFix

macOS 10.15 及之前的版本可以安装在 /Library/Extensions 目录下
或者通用的方法是注入到启动器里

具体方法:

  1. 下载 NVMeFix.kext
  2. 拷贝至 /Volumes/EFI/EFI-backup/EFI/OC/Kexts 目录中
  3. 更新 config.plist 文件, 在 Kernel -> add 节点下添加如下内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
         <dict>
<key>Arch</key>
<string>x86_64</string>
<key>BundlePath</key>
<string>NVMeFix.kext</string>
<key>Comment</key>
<string>NVMeFix</string>
<key>Enabled</key>
<true/>
<key>ExecutablePath</key>
<string>Contents/MacOS/NVMeFix</string>
<key>MaxKernel</key>
<string></string>
<key>MinKernel</key>
<string>12.0.0</string>
<key>PlistPath</key>
<string>Contents/Info.plist</string>
</dict>

表现

系统关机偶尔会变成重启

解决

参考文章: https://dortania.github.io/OpenCore-Post-Install/usb/misc/shutdown.html
GitHub: https://github.com/dortania/OpenCore-Post-Install/blob/master/extra-files/FixShutdown-USB-SSDT.dsl
GitHub: https://github.com/dortania/OpenCore-Post-Install/blob/master/extra-files/FixShutdown-Patch.plist

需要工具:https://github.com/acidanthera/MaciASL/releases

解决思路

  1. FixShutdown-USB-SSDT.dsl 文件使用 MaciASL 编译成 FixShutdown-USB-SSDT.aml 文件
  2. FixShutdown-USB-SSDT.aml 文件添加到 ACPI
  3. 打上补丁

FixShutdown-USB-SSDT.dsl:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
DefinitionBlock ("", "SSDT", 2, "Slav", "ZPTS", 0x00000000)
{
External (_SB_.PCI0.XHC_.PMEE, FieldUnitObj)
External (ZPTS, MethodObj) // 1 Arguments

Method (_PTS, 1, NotSerialized) // _PTS: Prepare To Sleep
{
ZPTS (Arg0)
If ((0x05 == Arg0))
{
\_SB.PCI0.XHC.PMEE = Zero
}
}
}

当 ZPTS 的 Arg0 被赋值为 0x05 时(S5 状态),让 SB.PCI0.XHC 这个设备变成 0

其中 SB.PCI0.XHC 是设备位置

FixShutdown-USB-SSDT.aml 文件拷贝到 /Volumes/EFI/EFI-backup/EFI/OC/ACPI

更新 config.plist 文件:

ACPI -> Add:

1
2
3
4
5
6
7
8
<dict>
<key>Comment</key>
<string>Ensure USB is shutdown correctly</string>
<key>Enabled</key>
<true/>
<key>Path</key>
<string>FixShutdown-USB-SSDT.aml</string>
</dict>

ACPI -> Patch:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<dict>
<key>Comment</key>
<string>_PTS to ZPTS</string>
<key>Count</key>
<integer>0</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>X1BUUw==</data>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data></data>
<key>OemTableId</key>
<data>AAAAAA==</data>
<key>Replace</key>
<data>WlBUUw==</data>
<key>ReplaceMask</key>
<data></data>
<key>Skip</key>
<integer>0</integer>
<key>TableLength</key>
<integer>0</integer>
<key>TableSignature</key>
<data>AAAAAA==</data>
</dict>
0%